github.com/codefly-dev/core@v0.1.107/resources/service_test.go (about) 1 package resources_test 2 3 import ( 4 "context" 5 "os" 6 "path" 7 "testing" 8 9 "github.com/codefly-dev/core/resources" 10 "github.com/stretchr/testify/require" 11 "gopkg.in/yaml.v3" 12 ) 13 14 func TestLoadingFromPathFlat(t *testing.T) { 15 testLoadingFromPath(t, "testdata/workspaces/flat-layout") 16 } 17 18 func TestLoadingFromPathModule(t *testing.T) { 19 testLoadingFromPath(t, "testdata/workspaces/module-layout") 20 } 21 22 func testLoadingFromPath(t *testing.T, dir string) { 23 ctx := context.Background() 24 25 cur, err := os.Getwd() 26 require.NoError(t, err) 27 28 err = os.Chdir(path.Join(cur, dir)) 29 require.NoError(t, err) 30 defer os.Chdir(cur) 31 32 workspace, err := resources.FindWorkspaceUp(ctx) 33 require.NoError(t, err) 34 require.Equal(t, "codefly-platform", workspace.Name) 35 require.Equal(t, 1, len(workspace.Modules)) 36 37 // Save and make sure we preserve the "active module" convention 38 tmpDir := t.TempDir() 39 40 err = workspace.SaveToDirUnsafe(ctx, tmpDir) 41 require.NoError(t, err) 42 43 _, err = os.ReadFile(path.Join(tmpDir, resources.WorkspaceConfigurationName)) 44 require.NoError(t, err) 45 } 46 47 func TestServiceUnique(t *testing.T) { 48 svc := resources.Service{Name: "svc", Module: "app"} 49 unique := svc.Unique() 50 inf, err := resources.ParseServiceWithOptionalModule(unique) 51 require.NoError(t, err) 52 require.Equal(t, "svc", inf.Name) 53 require.Equal(t, "app", inf.Module) 54 } 55 56 type testServiceSpec struct { 57 TestField string `yaml:"test-field"` 58 } 59 60 func TestSpecSave(t *testing.T) { 61 ctx := context.Background() 62 s := &resources.Service{Name: "testName"} 63 out, err := yaml.Marshal(s) 64 require.NoError(t, err) 65 require.Contains(t, string(out), "testName") 66 67 err = s.UpdateSpecFromSettings(&testServiceSpec{TestField: "testKind"}) 68 require.NoError(t, err) 69 require.NotNilf(t, s.Spec, "UpdateSpecFromSettings failed") 70 71 _, ok := s.Spec["test-field"] 72 require.True(t, ok) 73 74 // save to file 75 tmp := t.TempDir() 76 err = s.SaveAtDir(ctx, tmp) 77 require.NoError(t, err) 78 79 // make sure it looks good 80 content, err := os.ReadFile(path.Join(tmp, resources.ServiceConfigurationName)) 81 require.NoError(t, err) 82 require.Contains(t, string(content), "test-field") 83 require.Contains(t, string(content), "testKind") 84 85 s, err = resources.LoadFromDir[resources.Service](ctx, tmp) 86 require.NoError(t, err) 87 88 require.NoError(t, err) 89 var field testServiceSpec 90 err = s.LoadSettingsFromSpec(&field) 91 require.NoError(t, err) 92 require.Equal(t, "testKind", field.TestField) 93 }