diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6351ffe..28845ca 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,4 +44,4 @@ jobs: - name: Install dependencies run: go mod tidy - name: Run tests - run: go test -timeout 10m -v ./... + run: go test -timeout 10m -p 1 ./... diff --git a/tests/feature/cache_test.go b/tests/feature/cache_test.go index bdbc957..e8a4915 100644 --- a/tests/feature/cache_test.go +++ b/tests/feature/cache_test.go @@ -11,12 +11,14 @@ import ( "github.com/stretchr/testify/suite" "goravel/app/facades" + "goravel/tests" ) type contextKey string type CacheTestSuite struct { suite.Suite + tests.TestCase } func TestCacheTestSuite(t *testing.T) { diff --git a/tests/feature/config_test.go b/tests/feature/config_test.go new file mode 100644 index 0000000..bd3cf8f --- /dev/null +++ b/tests/feature/config_test.go @@ -0,0 +1,99 @@ +package feature + +import ( + "testing" + "time" + + "github.com/stretchr/testify/suite" + + "goravel/app/facades" + "goravel/tests" +) + +type ConfigTestSuite struct { + suite.Suite + tests.TestCase +} + +func TestConfigTestSuite(t *testing.T) { + suite.Run(t, &ConfigTestSuite{}) +} + +func (s *ConfigTestSuite) TestEnv() { + s.T().Setenv("TESTS_CONFIG_ENV", "goravel") + + s.Equal("goravel", facades.Config().Env("TESTS_CONFIG_ENV")) + s.Equal("default", facades.Config().Env("TESTS_CONFIG_ENV_MISSING", "default")) +} + +func (s *ConfigTestSuite) TestEnvString() { + s.T().Setenv("TESTS_CONFIG_ENV_STRING", "goravel") + + s.Equal("goravel", facades.Config().EnvString("TESTS_CONFIG_ENV_STRING")) + s.Equal("default", facades.Config().EnvString("TESTS_CONFIG_ENV_STRING_MISSING", "default")) +} + +func (s *ConfigTestSuite) TestEnvBool() { + s.T().Setenv("TESTS_CONFIG_ENV_BOOL", "true") + + s.True(facades.Config().EnvBool("TESTS_CONFIG_ENV_BOOL")) + s.True(facades.Config().EnvBool("TESTS_CONFIG_ENV_BOOL_MISSING", true)) +} + +func (s *ConfigTestSuite) TestAddAndGet() { + facades.Config().Add("tests.config.any", "goravel") + + s.Equal("goravel", facades.Config().Get("tests.config.any")) + s.Equal("default", facades.Config().Get("tests.config.any.missing", "default")) +} + +func (s *ConfigTestSuite) TestGetString() { + facades.Config().Add("tests.config.string", "goravel") + + s.Equal("goravel", facades.Config().GetString("tests.config.string")) + s.Equal("default", facades.Config().GetString("tests.config.string.missing", "default")) +} + +func (s *ConfigTestSuite) TestGetInt() { + facades.Config().Add("tests.config.int", 1) + + s.Equal(1, facades.Config().GetInt("tests.config.int")) + s.Equal(2, facades.Config().GetInt("tests.config.int.missing", 2)) +} + +func (s *ConfigTestSuite) TestGetBool() { + facades.Config().Add("tests.config.bool", true) + + s.True(facades.Config().GetBool("tests.config.bool")) + s.True(facades.Config().GetBool("tests.config.bool.missing", true)) +} + +func (s *ConfigTestSuite) TestGetDuration() { + facades.Config().Add("tests.config.duration", 3*time.Second) + + s.Equal(3*time.Second, facades.Config().GetDuration("tests.config.duration")) + s.Equal(2*time.Second, facades.Config().GetDuration("tests.config.duration.missing", 2*time.Second)) +} + +func (s *ConfigTestSuite) TestUnmarshalKey() { + facades.Config().Add("tests.config.unmarshal", map[string]any{ + "name": "goravel", + "enabled": true, + "retries": 3, + }) + + type testConfig struct { + Name string `mapstructure:"name"` + Enabled bool `mapstructure:"enabled"` + Retries int `mapstructure:"retries"` + } + + var config testConfig + err := facades.Config().UnmarshalKey("tests.config.unmarshal", &config) + s.Require().NoError(err) + s.Equal(testConfig{Name: "goravel", Enabled: true, Retries: 3}, config) + + err = facades.Config().UnmarshalKey("tests.config.unmarshal", config) + s.Error(err) + s.ErrorContains(err, "pointer") +}