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
 27	var reader *config.Reader
 28
 29	BeforeEach(func() {
 30		os.Clearenv()
 31		reader = config.NewReader()
 32	})
 33
 34	It("parses valid configuration", func() {
 35		aValidEnv()
 36
 37		c, err := reader.Read()
 38		Expect(err).NotTo(HaveOccurred())
 39		Expect(c).ToNot(BeNil())
 40	})
 41
 42	Context("github", func() {
 43		It("parses configuration", func() {
 44			aValidEnv()
 45			setEnv(githubUsername, aGithubUsername)
 46			unsetEnv(githubToken)
 47
 48			c, err := reader.Read()
 49
 50			Expect(err).NotTo(HaveOccurred())
 51			Expect(c.Github.Username).To(Equal(aGithubUsername))
 52			Expect(c.Github.Token).To(BeNil())
 53		})
 54
 55		It("parses configuration with token", func() {
 56			aValidEnv()
 57			setEnv(githubUsername, aGithubUsername)
 58			setEnv(githubToken, aGithubToken)
 59
 60			c, err := reader.Read()
 61
 62			Expect(err).NotTo(HaveOccurred())
 63			Expect(c.Github.Username).To(Equal(aGithubUsername))
 64			Expect(*c.Github.Token).To(Equal(aGithubToken))
 65		})
 66
 67		It("fails on missing username", func() {
 68			aValidEnv()
 69			unsetEnv(githubUsername)
 70
 71			c, err := reader.Read()
 72
 73			Expect(err).To(HaveOccurred())
 74			Expect(c).To(BeNil())
 75		})
 76
 77	})
 78
 79	Context("Gitea", func() {
 80		It("parses configuration", func() {
 81			aValidEnv()
 82			setEnv(giteaUrl, "https://gitea.url/api")
 83			setEnv(giteaToken, "a-gitea-token")
 84
 85			c, err := reader.Read()
 86
 87			Expect(err).NotTo(HaveOccurred())
 88			Expect(c.Gitea.Url).To(Equal("https://gitea.url/api"))
 89			Expect(c.Gitea.Token).To(Equal("a-gitea-token"))
 90		})
 91
 92		It("fails on missing gitea url", func() {
 93			aValidEnv()
 94			unsetEnv(giteaUrl)
 95
 96			c, err := reader.Read()
 97
 98			Expect(err).To(HaveOccurred())
 99			Expect(c).To(BeNil())
100			Expect(err.Error()).To(Equal("missing mandatory parameter GITEA_URL, please specify your target gitea instance"))
101		})
102
103		It("fails on missing gitea token", func() {
104			aValidEnv()
105			unsetEnv(giteaToken)
106
107			c, err := reader.Read()
108
109			Expect(err).To(HaveOccurred())
110			Expect(c).To(BeNil())
111			Expect(err.Error()).To(Equal("missing mandatory parameter GITEA_TOKEN, please specify your gitea application token"))
112
113		})
114	})
115
116	Context("mirror mode", func() {
117		It("sets default mirror mode", func() {
118			aValidEnv()
119			unsetEnv(mirrorMode)
120
121			c, err := reader.Read()
122
123			Expect(err).NotTo(HaveOccurred())
124			Expect(c.MirrorMode).To(Equal(config.MirrorModePublic))
125		})
126
127		DescribeTable("parses mirror mode: ", func(in string, exp string) {
128			aValidEnv()
129			setEnv(mirrorMode, in)
130
131			c, err := reader.Read()
132
133			Expect(err).NotTo(HaveOccurred())
134			Expect(c.MirrorMode).To(Equal(exp))
135		},
136			Entry("public mirror mode", publicMirrorMode, config.MirrorModePublic),
137			Entry("private mirror mode", privateAndPublicMirrorMode, config.MirrorModePrivateAndPublic),
138		)
139
140		It("fails on unknown mirror mode", func() {
141			aValidEnv()
142			setEnv(mirrorMode, unknownMirrorMode)
143
144			c, err := reader.Read()
145
146			Expect(err).To(HaveOccurred())
147			Expect(c).To(BeNil())
148
149			expected := "unknown mirror mode %s, please specify a valid mirror mode: PUBLIC, PRIVATE_AND_PUBLIC"
150			Expect(err.Error()).To(Equal(fmt.Sprintf(expected, unknownMirrorMode)))
151		})
152
153	})
154})
155
156func setEnv(k string, v string) {
157	err := os.Setenv(k, v)
158	Expect(err).NotTo(HaveOccurred())
159}
160
161func unsetEnv(k string) {
162	err := os.Unsetenv(k)
163	Expect(err).NotTo(HaveOccurred())
164}
165
166func aValidEnv() {
167	setEnv(mirrorMode, "PUBLIC")
168	setEnv(giteaUrl, "https://gitea.url")
169	setEnv(giteaToken, "valid")
170	setEnv(githubUsername, "a-github-username")
171}