arnaucube
arnaucube/mirror-to-giteaPublic Self-hosted repository
mirror-to-gitea/internal/config/read_test.go
internal/config/read_test.goRaw
  1package config_test
  2
  3import (
  4	"fmt"
  5	"github.com/jaedle/mirror-to-gitea/internal/config"
  6	. "github.com/onsi/ginkgo"
  7	. "github.com/onsi/ginkgo/extensions/table"
  8	. "github.com/onsi/gomega"
  9	"os"
 10)
 11
 12const mirrorMode = "MIRROR_MODE"
 13const giteaUrl = "GITEA_URL"
 14const giteaToken = "GITEA_TOKEN"
 15const githubUsername = "GITHUB_USERNAME"
 16const githubToken = "GITHUB_TOKEN"
 17
 18const publicMirrorMode = "PUBLIC"
 19const privateAndPublicMirrorMode = "PRIVATE_AND_PUBLIC"
 20const unknownMirrorMode = "UNKNOWN"
 21
 22const aGithubUsername = "a-github-user"
 23const aGithubToken = "a-github-token"
 24
 25var _ = Describe("Read", func() {
 26	BeforeEach(func() {
 27		os.Clearenv()
 28	})
 29
 30	It("parses valid configuration", func() {
 31		aValidEnv()
 32
 33		c, err := config.Read()
 34		Expect(err).NotTo(HaveOccurred())
 35		Expect(c).ToNot(BeNil())
 36	})
 37
 38	Context("github", func() {
 39		It("parses configuration", func() {
 40			aValidEnv()
 41			setEnv(githubUsername, aGithubUsername)
 42			unsetEnv(githubToken)
 43
 44			c, err := config.Read()
 45
 46			Expect(err).NotTo(HaveOccurred())
 47			Expect(c.Github.Username).To(Equal(aGithubUsername))
 48			Expect(c.Github.Token).To(BeNil())
 49		})
 50
 51		It("parses configuration with token", func() {
 52			aValidEnv()
 53			setEnv(githubUsername, aGithubUsername)
 54			setEnv(githubToken, aGithubToken)
 55
 56			c, err := config.Read()
 57
 58			Expect(err).NotTo(HaveOccurred())
 59			Expect(c.Github.Username).To(Equal(aGithubUsername))
 60			Expect(*c.Github.Token).To(Equal(aGithubToken))
 61		})
 62
 63		It("fails on missing username", func() {
 64			aValidEnv()
 65			unsetEnv(githubUsername)
 66
 67			c, err := config.Read()
 68
 69			Expect(err).To(HaveOccurred())
 70			Expect(c).To(BeNil())
 71		})
 72
 73	})
 74
 75	Context("Gitea", func() {
 76		It("parses configuration", func() {
 77			aValidEnv()
 78			setEnv(giteaUrl, "https://gitea.url/api")
 79			setEnv(giteaToken, "a-gitea-token")
 80
 81			c, err := config.Read()
 82
 83			Expect(err).NotTo(HaveOccurred())
 84			Expect(c.Gitea.Url).To(Equal("https://gitea.url/api"))
 85			Expect(c.Gitea.Token).To(Equal("a-gitea-token"))
 86		})
 87
 88		It("fails on missing gitea url", func() {
 89			aValidEnv()
 90			unsetEnv(giteaUrl)
 91
 92			c, err := config.Read()
 93
 94			Expect(err).To(HaveOccurred())
 95			Expect(c).To(BeNil())
 96			Expect(err.Error()).To(Equal("missing mandatory parameter GITEA_URL, please specify your target gitea instance"))
 97		})
 98
 99		It("fails on missing gitea token", func() {
100			aValidEnv()
101			unsetEnv(giteaToken)
102
103			c, err := config.Read()
104
105			Expect(err).To(HaveOccurred())
106			Expect(c).To(BeNil())
107			Expect(err.Error()).To(Equal("missing mandatory parameter GITEA_TOKEN, please specify your gitea application token"))
108
109		})
110	})
111
112	Context("mirror mode", func() {
113		It("sets default mirror mode", func() {
114			aValidEnv()
115			unsetEnv(mirrorMode)
116
117			c, err := config.Read()
118
119			Expect(err).NotTo(HaveOccurred())
120			Expect(c.MirrorMode).To(Equal(config.MirrorModePublic))
121		})
122
123		DescribeTable("parses mirror mode: ", func(in string, exp string) {
124			aValidEnv()
125			setEnv(mirrorMode, in)
126
127			c, err := config.Read()
128
129			Expect(err).NotTo(HaveOccurred())
130			Expect(c.MirrorMode).To(Equal(exp))
131		},
132			Entry("public mirror mode", publicMirrorMode, config.MirrorModePublic),
133			Entry("private mirror mode", privateAndPublicMirrorMode, config.MirrorModePrivateAndPublic),
134		)
135
136		It("fails on unknown mirror mode", func() {
137			aValidEnv()
138			setEnv(mirrorMode, unknownMirrorMode)
139
140			c, err := config.Read()
141
142			Expect(err).To(HaveOccurred())
143			Expect(c).To(BeNil())
144
145			expected := "unknown mirror mode %s, please specify a valid mirror mode: PUBLIC, PRIVATE_AND_PUBLIC"
146			Expect(err.Error()).To(Equal(fmt.Sprintf(expected, unknownMirrorMode)))
147		})
148
149	})
150})
151
152func setEnv(k string, v string) {
153	err := os.Setenv(k, v)
154	Expect(err).NotTo(HaveOccurred())
155}
156
157func unsetEnv(k string) {
158	err := os.Unsetenv(k)
159	Expect(err).NotTo(HaveOccurred())
160}
161
162func aValidEnv() {
163	setEnv(mirrorMode, "PUBLIC")
164	setEnv(giteaUrl, "https://gitea.url")
165	setEnv(giteaToken, "valid")
166	setEnv(githubUsername, "a-github-username")
167}