Skip to content

Commit

Permalink
Second set of tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dkyanakiev authored and Dimitar Yanakiev committed Nov 29, 2023
1 parent 2882424 commit 1f548a8
Show file tree
Hide file tree
Showing 14 changed files with 1,077 additions and 17 deletions.
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,8 @@ build:

.PHONY: run
run:
./bin/vaul7y
./bin/vaul7y

.PHONY: test
test:
go test ./...
59 changes: 59 additions & 0 deletions component/mounts_table_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/dkyanakiev/vaulty/component"
"github.com/dkyanakiev/vaulty/component/componentfakes"
"github.com/dkyanakiev/vaulty/models"
"github.com/dkyanakiev/vaulty/styles"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -57,4 +58,62 @@ func TestMountsTable_Pass(t *testing.T) {

})

t.Run("No data to render", func(t *testing.T) {
fakeTable := &componentfakes.FakeTable{}
mTable := component.NewMountsTable()

mTable.Table = fakeTable
mTable.Props.Namespace = "default"
mTable.Props.Data = map[string]*models.MountOutput{}

var NoResourcesCalled bool
mTable.Props.HandleNoResources = func(format string, args ...interface{}) {
NoResourcesCalled = true

r.Equal("%sno mounts available\n¯%s\\_( ͡• ͜ʖ ͡•)_/¯", format)
r.Len(args, 2)
r.Equal(args[0], styles.HighlightPrimaryTag)
r.Equal(args[1], styles.HighlightSecondaryTag)
}

slot := tview.NewFlex()
mTable.Bind(slot)

// It doesn't error
err := mTable.Render()
r.NoError(err)

// It handled the case that there are no resources
r.True(NoResourcesCalled)

// It didn't returned after handling no resources
r.Equal(fakeTable.RenderHeaderCallCount(), 0)
r.Equal(fakeTable.RenderRowCallCount(), 0)

})

}

//TODO: Revisit after validation logic is fixed for mounts_table
// func TestMountsTable_Fail(t *testing.T) {
// r := require.New(t)

// t.Run("When SelectDeployment is not set", func(t *testing.T) {
// mt := component.NewMountsTable()

// mt.Props.HandleNoResources = func(format string, args ...interface{}) {}

// slot := tview.NewFlex()
// mt.Bind(slot)

// // It doesn't error
// err := mt.Render()
// r.NoError(err)

// // It provides the correct error message
// r.EqualError(err, "component properties not set")

// // It is the correct error
// r.True(errors.Is(err, component.ErrComponentPropsNotSet))
// })
// }
19 changes: 9 additions & 10 deletions component/policy_acl_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,18 +71,17 @@ func (p *PolicyAclTable) reset() {

func (p *PolicyAclTable) Render() error {
p.reset()
//p.Table.RenderHeader(PolicyAclTableHeaders)

if p.Props == nil {
if p.Props.SelectedPolicyACL == "" {
p.Props.HandleNoResources(
"%sCant read ACL policy \n%s\\(╯°□°)╯︵ ┻━┻",
styles.HighlightPrimaryTag,
styles.HighlightSecondaryTag,
)
return nil
}
if p.Props.SelectedPolicyACL == "" {
p.Props.HandleNoResources(
"%sCant read ACL policy \n%s\\(╯°□°)╯︵ ┻━┻",
styles.HighlightPrimaryTag,
styles.HighlightSecondaryTag,
)
return nil
}
//p.Table.RenderHeader(PolicyAclTableHeaders)

p.renderACL()
p.slot.AddItem(p.TextView.Primitive(), 0, 1, false)
return nil
Expand Down
72 changes: 72 additions & 0 deletions component/policy_acl_table_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package component_test

import (
"testing"

"github.com/dkyanakiev/vaulty/component"
"github.com/dkyanakiev/vaulty/component/componentfakes"
"github.com/dkyanakiev/vaulty/styles"
"github.com/rivo/tview"
"github.com/stretchr/testify/require"
)

func TestPolicyACLTable_Pass(t *testing.T) {
r := require.New(t)
t.Run("Data to be rendered", func(t *testing.T) {
// fakeTable := &componentfakes.FakeTable{}
fakeTextView := &componentfakes.FakeTextView{}
pt := component.NewPolicyAclTable()

pt.TextView = fakeTextView
pt.Props.SelectedPolicyName = "policy-one"
pt.Props.SelectedPolicyACL = "path \"secret/data/path\" { capabilities = [\"read\", \"list\"] }"

pt.Props.SelectPath = func(id string) {}
pt.Props.HandleNoResources = func(format string, args ...interface{}) {}

slot := tview.NewFlex()
pt.Bind(slot)

err := pt.Render()
r.NoError(err)

// It renders the correct text
fakeTextView.GetTextReturns(pt.Props.SelectedPolicyACL)
fakeTextView.GetTextReturnsOnCall(0, pt.Props.SelectedPolicyACL)
renderedText := fakeTextView.GetText(true)

r.Equal("path \"secret/data/path\" { capabilities = [\"read\", \"list\"] }", renderedText)

})

t.Run("No data to be rendered", func(t *testing.T) {
fakeTextView := &componentfakes.FakeTextView{}
pt := component.NewPolicyAclTable()

pt.TextView = fakeTextView
pt.Props.SelectedPolicyName = "policy-one"
pt.Props.SelectedPolicyACL = ""

var handleNoResourcesCalled bool
pt.Props.HandleNoResources = func(format string, args ...interface{}) {
handleNoResourcesCalled = true

r.Equal("%sCant read ACL policy \n%s\\(╯°□°)╯︵ ┻━┻", format)
r.Len(args, 2)
r.Equal(args[0], styles.HighlightPrimaryTag)
r.Equal(args[1], styles.HighlightSecondaryTag)
}

slot := tview.NewFlex()
pt.Bind(slot)

err := pt.Render()
r.NoError(err)

r.True(handleNoResourcesCalled)

})
}

func TestPolicyACLTable_Fail(t *testing.T) {
}
98 changes: 98 additions & 0 deletions component/policy_table_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package component_test

import (
"testing"

"github.com/dkyanakiev/vaulty/component"
"github.com/dkyanakiev/vaulty/component/componentfakes"
"github.com/dkyanakiev/vaulty/styles"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
"github.com/stretchr/testify/require"
)

func TestPolicyTable_Pass(t *testing.T) {
r := require.New(t)
t.Run("When the component is bound", func(t *testing.T) {

fakeTable := &componentfakes.FakeTable{}
pt := component.NewPolicyTable()

pt.Table = fakeTable
pt.Props.Data = []string{"policy1", "policy2", "policy3"}

pt.Props.SelectPath = func(id string) {}
pt.Props.HandleNoResources = func(format string, args ...interface{}) {}
slot := tview.NewFlex()
pt.Bind(slot)
// It doesn't error
err := pt.Render()
r.NoError(err)

// Render header rows
renderHeaderCount := fakeTable.RenderHeaderCallCount()
r.Equal(renderHeaderCount, 1)

// Correct headers
header := fakeTable.RenderHeaderArgsForCall(0)
r.Equal(component.PolicyTableHeaderJobs, header)

// It renders the correct number of rows
renderRowCallCount := fakeTable.RenderRowCallCount()
r.Equal(renderRowCallCount, 3)

row1, index1, c1 := fakeTable.RenderRowArgsForCall(0)
row2, index2, c2 := fakeTable.RenderRowArgsForCall(1)
row3, index3, c3 := fakeTable.RenderRowArgsForCall(2)

expectedRow1 := []string{"policy1"}
expectedRow2 := []string{"policy2"}
expectedRow3 := []string{"policy3"}

r.Equal(expectedRow1, row1)
r.Equal(expectedRow2, row2)
r.Equal(expectedRow3, row3)
r.Equal(index1, 1)
r.Equal(index2, 2)
r.Equal(index3, 3)

r.Equal(c1, tcell.ColorYellow)
r.Equal(c2, tcell.ColorYellow)
r.Equal(c3, tcell.ColorYellow)

})

t.Run("No data to render", func(t *testing.T) {
fakeTable := &componentfakes.FakeTable{}
pt := component.NewPolicyTable()

pt.Table = fakeTable
pt.Props.Data = []string{}

pt.Props.HandleNoResources = func(format string, args ...interface{}) {}
var NoResourcesCalled bool
pt.Props.HandleNoResources = func(format string, args ...interface{}) {
NoResourcesCalled = true

r.Equal("%sNo policy found\n%s\\(╯°□°)╯︵ ┻━┻", format)
r.Len(args, 2)
r.Equal(args[0], styles.HighlightPrimaryTag)
r.Equal(args[1], styles.HighlightSecondaryTag)
}

slot := tview.NewFlex()
pt.Bind(slot)
// It doesn't error
err := pt.Render()
r.NoError(err)

// It handled the case that there are no resources
r.True(NoResourcesCalled)

// It didn't returned after handling no resources
r.Equal(fakeTable.RenderHeaderCallCount(), 0)
r.Equal(fakeTable.RenderRowCallCount(), 0)

})

}
49 changes: 49 additions & 0 deletions layout/layout_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package layout_test

import (
"testing"

"github.com/dkyanakiev/vaulty/layout"
"github.com/rivo/tview"
"github.com/stretchr/testify/require"
)

func TestDefaultLayout(t *testing.T) {
r := require.New(t)

l := layout.New(layout.Default)

r.NotNil(l.Container)
r.IsType(l.Container, &tview.Application{})

r.NotNil(l.Pages)
r.IsType(l.Pages, &tview.Pages{})
r.Equal(l.Pages.GetPageCount(), 1)
r.True(l.Pages.HasPage("main"))

r.NotNil(l.Header)
r.NotNil(l.Header.SlotInfo)
r.IsType(l.Header.SlotInfo, &tview.Flex{})

r.NotNil(l.Header.SlotCmd)
r.IsType(l.Header.SlotCmd, &tview.Flex{})

r.NotNil(l.Header.SlotLogo)
r.IsType(l.Header.SlotLogo, &tview.Flex{})

r.NotNil(l.Elements)
r.NotNil(l.Elements.ClusterInfo)
r.IsType(l.Elements.ClusterInfo, &tview.Flex{})

r.NotNil(l.Elements.Dropdowns)
r.IsType(l.Elements.Dropdowns, &tview.Flex{})

r.NotNil(l.Body)
r.IsType(l.Body, &tview.Flex{})

r.NotNil(l.Footer)
r.IsType(l.Footer, &tview.Flex{})

r.NotNil(l.MainPage)
r.IsType(l.MainPage, &tview.Flex{})
}
5 changes: 5 additions & 0 deletions vault/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import (
"github.com/rs/zerolog"
)

//go:generate counterfeiter . Client
type Client interface {
Address() string
}

//go:generate counterfeiter . Vault
type Vault struct {
vault *api.Client
Client Client
Expand All @@ -21,6 +23,7 @@ type Vault struct {
Logger *zerolog.Logger
}

//go:generate counterfeiter . Logical
type Logical interface {
List(path string) (*api.Secret, error)
}
Expand All @@ -29,13 +32,15 @@ type Secret interface {
//ListSecrets(string) (*api.Secret, error)
}

//go:generate counterfeiter . Sys
type Sys interface {
ListMounts() (map[string]*api.MountOutput, error)
ListPolicies() ([]string, error)
GetPolicy(name string) (string, error)
//ListMounts() ([]*api.Sys, error)
}

//go:generate counterfeiter . KV2
type KV2 interface {
Get(context.Context, string) (*api.KVSecret, error)
GetMetadata(context.Context, string) (*api.KVMetadata, error)
Expand Down
4 changes: 2 additions & 2 deletions vault/kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ import (
func (v *Vault) Get(ctx context.Context, path string) (*api.KVSecret, error) {
secret, err := v.KV2.Get(ctx, path)
if err != nil {
v.Logger.Err(err).Msgf("filed to retrieve secret: %w", err)
v.Logger.Err(err).Msgf("filed to retrieve secret: %s", err)
}
return secret, nil
}

func (v *Vault) GetMetadata(ctx context.Context, path string) (*api.KVMetadata, error) {
secret, err := v.KV2.GetMetadata(ctx, path)
if err != nil {
v.Logger.Err(err).Msgf("filed to retrieve secret: %w", err)
v.Logger.Err(err).Msgf("filed to retrieve secret: %s", err)
}
return secret, nil
}
Loading

0 comments on commit 1f548a8

Please sign in to comment.