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  }