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}