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}