github.com/markgemmill/dover@v0.2.1-dev.4/app/config_test.go (about) 1 package app 2 3 import ( 4 "fmt" 5 "github.com/stretchr/testify/assert" 6 "github.com/stretchr/testify/suite" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 ) 12 13 func TestJSONConfigWithValues(t *testing.T) { 14 var projectFile = `{ 15 "name": "Some Project", 16 "version": "0.0.0", 17 "dover": { 18 "version_format": "000.a0", 19 "versioned_files": [ 20 "project.json" 21 ] 22 } 23 }` 24 cfg, err := parseJSONConfig(projectFile) 25 26 assert.Nil(t, err) 27 assert.Equal(t, "000.a0", cfg.format) 28 assert.Equal(t, 1, len(cfg.files)) 29 } 30 31 func TestJSONConfigWithValues2(t *testing.T) { 32 var projectFile = `{ 33 "name": "Some Project", 34 "version": "", 35 "dover": { 36 "version_format": "000.a0", 37 "versioned_files": [ 38 "package.json", 39 "main.go" 40 ] 41 } 42 }` 43 cfg, err := parseJSONConfig(projectFile) 44 45 assert.Nil(t, err) 46 assert.Equal(t, "000.a0", cfg.format) 47 assert.Equal(t, 2, len(cfg.files)) 48 } 49 50 func TestJSONConfigWithOnlyVersionedFiles(t *testing.T) { 51 var projectFile = `{ 52 "name": "Some Project", 53 "version": "0.0.0", 54 "dover": { 55 "versioned_files": [ 56 "project.json" 57 ] 58 } 59 }` 60 cfg, err := parseJSONConfig(projectFile) 61 62 assert.Nil(t, err) 63 assert.Equal(t, "", cfg.format) 64 assert.Equal(t, 1, len(cfg.files)) 65 } 66 67 func TestJSONConfigWithNoFiles(t *testing.T) { 68 var projectFile = `{ 69 "name": "Some Project", 70 "version": "0.0.0", 71 "dover": { 72 "version_format": "0.0.0", 73 "versioned_files": [] 74 } 75 }` 76 cfg, err := parseJSONConfig(projectFile) 77 78 assert.NotNil(t, err) 79 assert.Equal(t, "", cfg.format) 80 assert.Equal(t, 0, len(cfg.files)) 81 } 82 83 func TestJSONConfigWithNoFileVar(t *testing.T) { 84 var projectFile = `{ 85 "name": "Some Project", 86 "version": "0.0.0", 87 "dover": { 88 "version_format": "0.0.0" 89 } 90 }` 91 cfg, err := parseJSONConfig(projectFile) 92 93 assert.NotNil(t, err) 94 assert.Equal(t, "", cfg.format) 95 assert.Equal(t, 0, len(cfg.files)) 96 } 97 98 type ConfigTestSuite struct { 99 suite.Suite 100 homeDir string 101 tempDir string 102 } 103 104 func (suite *ConfigTestSuite) writeFile(name, content string) { 105 file := filepath.Join(suite.tempDir, name) 106 err := os.WriteFile(file, []byte(content), 0666) 107 ExitOnError(err) 108 } 109 110 func (suite *ConfigTestSuite) SetupTest() { 111 suite.homeDir, _ = os.Getwd() 112 suite.tempDir, _ = ioutil.TempDir("", "gotest-*") 113 suite.writeFile("coding.go", `\nVERSION = "0.1.0-a0"\n`) 114 suite.writeFile("overhill.go", `\n__version__ = "0.1.0-a0"\n`) 115 err := os.Chdir(suite.tempDir) 116 ExitOnError(err) 117 } 118 119 func (suite *ConfigTestSuite) TeardownTest() { 120 err := os.Chdir(suite.homeDir) 121 ExitOnError(err) 122 err = os.RemoveAll(suite.tempDir) 123 ExitOnError(err) 124 } 125 126 func (suite *ConfigTestSuite) TestNoConfigFiles() { 127 128 _, err := configValues() 129 suite.NotNil(err) 130 suite.Equal("Unable to find dover configuration.", fmt.Sprint(err)) 131 } 132 133 func (suite *ConfigTestSuite) TestInvalidDoverConfigFile() { 134 suite.writeFile(".dover", `[dover]`) 135 136 _, err := configValues() 137 suite.NotNil(err) 138 suite.Equal("`.dover` config has no versioned_files.", fmt.Sprint(err)) 139 } 140 141 func (suite *ConfigTestSuite) TestConfigWithInvalidVersionedFile() { 142 suite.writeFile(".dover", `[dover] 143 versioned_files = [ 144 "dunnowherethisis.go", 145 "overhill.go" 146 ] 147 `) 148 149 _, err := configValues() 150 suite.NotNil(err) 151 suite.Equal("No such file: dunnowherethisis.go", fmt.Sprint(err)) 152 } 153 154 func (suite *ConfigTestSuite) TestValidDoverConfigFile() { 155 suite.writeFile(".dover", `[dover] 156 versioned_files = [ 157 "coding.go", 158 "overhill.go" 159 ] 160 `) 161 162 cfg, err := configValues() 163 suite.Nil(err) 164 suite.Equal("000.A.0", cfg.format) 165 suite.Equal(2, len(cfg.files)) 166 } 167 168 func (suite *ConfigTestSuite) TestValidPyProjectConfigFile() { 169 // test the default format code... 170 suite.writeFile("pyproject.toml", `[tool.dover] 171 versioned_files = [ 172 "coding.go", 173 "overhill.go" 174 ] 175 `) 176 177 cfg, err := configValues() 178 suite.Nil(err) 179 suite.Equal("000.A.0", cfg.format) 180 suite.Equal(2, len(cfg.files)) 181 } 182 183 func (suite *ConfigTestSuite) TestValidPackageJsonConfigFile() { 184 suite.writeFile("package.json", `{ 185 "name": "project", 186 "version": "0.1.0.beta.0", 187 "dover": { 188 "version_format": "000+a0", 189 "versioned_files": [ 190 "coding.go", 191 "overhill.go" 192 ] 193 } 194 }`) 195 196 cfg, err := configValues() 197 suite.Nil(err) 198 suite.Equal("000+a0", cfg.format) 199 suite.Equal(2, len(cfg.files)) 200 } 201 202 func TestRunConfigTestSuite(t *testing.T) { 203 suite.Run(t, new(ConfigTestSuite)) 204 }