2022-11-18 09:57:31 +00:00
package config
import (
"encoding/json"
"reflect"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestRootMarshalUnmarshal ( t * testing . T ) {
// Marshal empty
buf , err := json . Marshal ( & Root { } )
require . NoError ( t , err )
// Unmarshal empty
var root Root
err = json . Unmarshal ( buf , & root )
require . NoError ( t , err )
// Compare
assert . True ( t , reflect . DeepEqual ( Root { } , root ) )
}
func TestRootLoad ( t * testing . T ) {
root := & Root { }
2022-11-28 09:59:43 +00:00
err := root . Load ( "../tests/basic/bundle.yml" )
2022-11-18 09:57:31 +00:00
require . NoError ( t , err )
assert . Equal ( t , "basic" , root . Bundle . Name )
}
func TestRootMergeStruct ( t * testing . T ) {
root := & Root {
2023-04-12 14:17:13 +00:00
Path : "path" ,
2022-11-18 09:57:31 +00:00
Workspace : Workspace {
Host : "foo" ,
Profile : "profile" ,
} ,
}
other := & Root {
2023-04-12 14:17:13 +00:00
Path : "path" ,
2022-11-18 09:57:31 +00:00
Workspace : Workspace {
Host : "bar" ,
} ,
}
assert . NoError ( t , root . Merge ( other ) )
assert . Equal ( t , "bar" , root . Workspace . Host )
assert . Equal ( t , "profile" , root . Workspace . Profile )
}
func TestRootMergeMap ( t * testing . T ) {
root := & Root {
2023-04-12 14:17:13 +00:00
Path : "path" ,
2022-11-18 09:57:31 +00:00
Environments : map [ string ] * Environment {
"development" : {
Workspace : & Workspace {
Host : "foo" ,
Profile : "profile" ,
} ,
} ,
} ,
}
other := & Root {
2023-04-12 14:17:13 +00:00
Path : "path" ,
2022-11-18 09:57:31 +00:00
Environments : map [ string ] * Environment {
"development" : {
Workspace : & Workspace {
Host : "bar" ,
} ,
} ,
} ,
}
assert . NoError ( t , root . Merge ( other ) )
assert . Equal ( t , & Workspace { Host : "bar" , Profile : "profile" } , root . Environments [ "development" ] . Workspace )
}
2023-04-17 10:21:21 +00:00
func TestDuplicateIdOnLoadReturnsError ( t * testing . T ) {
root := & Root { }
err := root . Load ( "./testdata/duplicate_resource_names_in_root/bundle.yml" )
assert . ErrorContains ( t , err , "multiple resources named foo (job at ./testdata/duplicate_resource_names_in_root/bundle.yml, pipeline at ./testdata/duplicate_resource_names_in_root/bundle.yml)" )
}
func TestDuplicateIdOnMergeReturnsError ( t * testing . T ) {
root := & Root { }
err := root . Load ( "./testdata/duplicate_resource_name_in_subconfiguration/bundle.yml" )
require . NoError ( t , err )
other := & Root { }
err = other . Load ( "./testdata/duplicate_resource_name_in_subconfiguration/resources.yml" )
require . NoError ( t , err )
err = root . Merge ( other )
assert . ErrorContains ( t , err , "multiple resources named foo (job at ./testdata/duplicate_resource_name_in_subconfiguration/bundle.yml, pipeline at ./testdata/duplicate_resource_name_in_subconfiguration/resources.yml)" )
}