airshipctl/pkg/document/document_test.go
Ian Howell 49027f4151 Tighten the restrictions of the linter
This change causes the linter to be a bit more complainy. The hope is
that this will cut down on some of the more pedantic issues being caught
in code reviews, and thus reduce the overall time a change spends in the
review process.

This change includes various changes to the codebase to bring it up to
the new standards.

Change-Id: I570d304bca5554404354f972d8a2743279a0171b
2020-01-10 14:54:34 -06:00

100 lines
3.2 KiB
Go

package document_test
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"opendev.org/airship/airshipctl/pkg/document"
"opendev.org/airship/airshipctl/testutil"
)
func TestDocument(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
// the easiest way to construct a bunch of documents
// is by manufacturing a bundle
//
// alanmeadows(TODO): at some point
// refactoring this so there isn't a reliance
// on a bundle might be useful
fSys := testutil.SetupTestFs(t, "testdata")
bundle, err := document.NewBundle(fSys, "/", "/")
require.NoError(err, "Building Bundle Failed")
require.NotNil(bundle)
t.Run("GetName", func(t *testing.T) {
docs, err := bundle.GetAllDocuments()
require.NoError(err, "Unexpected error trying to GetAllDocuments")
nameList := []string{}
for _, doc := range docs {
nameList = append(nameList, doc.GetName())
}
assert.Contains(nameList, "tiller-deploy", "Could not find expected name")
})
t.Run("AsYAML", func(t *testing.T) {
doc, err := bundle.GetByName("some-random-deployment-we-will-filter")
require.NoError(err, "Unexpected error trying to GetByName for AsYAML Test")
// see if we can marshal it while we're here for coverage
// as this is a dependency for AsYAML
json, err := doc.MarshalJSON()
require.NoError(err, "Unexpected error trying to MarshalJSON()")
assert.NotNil(json)
// get it as yaml
yaml, err := doc.AsYAML()
require.NoError(err, "Unexpected error trying to AsYAML()")
// convert the bytes into a string for comparison
//
// alanmeadows(NOTE): marshal can reorder things
// in the yaml, and does not return document beginning
// or end markers that may of been in the source so
// the FixtureInitiallyIgnored has been altered to
// look more or less how unmarshalling it would look
s := string(yaml)
fileData, err := fSys.ReadFile("/initially_ignored.yaml")
require.NoError(err, "Unexpected error reading initially_ignored.yaml file")
// increase the chance of a match by removing any \n suffix on both actual
// and expected
assert.Equal(strings.TrimRight(s, "\n"), strings.TrimRight(string(fileData), "\n"))
})
t.Run("GetString", func(t *testing.T) {
doc, err := bundle.GetByName("some-random-deployment-we-will-filter")
require.NoError(err, "Unexpected error trying to GetByName")
appLabelMatch, err := doc.GetString("spec.selector.matchLabels.app")
require.NoError(err, "Unexpected error trying to GetString from document")
assert.Equal(appLabelMatch, "some-random-deployment-we-will-filter")
})
t.Run("GetNamespace", func(t *testing.T) {
doc, err := bundle.GetByName("some-random-deployment-we-will-filter")
require.NoError(err, "Unexpected error trying to GetByName")
assert.Equal("foobar", doc.GetNamespace())
})
t.Run("GetStringSlice", func(t *testing.T) {
doc, err := bundle.GetByName("some-random-deployment-we-will-filter")
require.NoError(err, "Unexpected error trying to GetByName")
s := []string{"foobar"}
gotSlice, err := doc.GetStringSlice("spec.template.spec.containers[0].args")
require.NoError(err, "Unexpected error trying to GetStringSlice")
assert.Equal(s, gotSlice)
})
}