sqs-browse: started working on tests
This commit is contained in:
parent
7526c095ee
commit
cff059e160
11 changed files with 516 additions and 16 deletions
|
|
@ -24,16 +24,18 @@ func (s *Service) Scan(ctx context.Context, table string) (*models.ResultSet, er
|
|||
return nil, errors.Wrapf(err, "unable to scan table %v", table)
|
||||
}
|
||||
|
||||
// Get the columns
|
||||
// TODO: need to get PKs and SKs from table
|
||||
pk, sk := "pk", "sk"
|
||||
|
||||
// Get the columns
|
||||
seenColumns := make(map[string]int)
|
||||
seenColumns["pk"] = 0
|
||||
seenColumns["sk"] = 1
|
||||
seenColumns[pk] = 0
|
||||
seenColumns[sk] = 1
|
||||
|
||||
for _, result := range results {
|
||||
for k := range result {
|
||||
if _, isSeen := seenColumns[k]; !isSeen {
|
||||
seenColumns[k] = len(seenColumns)
|
||||
seenColumns[k] = 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -43,12 +45,17 @@ func (s *Service) Scan(ctx context.Context, table string) (*models.ResultSet, er
|
|||
columns = append(columns, k)
|
||||
}
|
||||
sort.Slice(columns, func(i, j int) bool {
|
||||
if seenColumns[columns[i]] == seenColumns[columns[j]] {
|
||||
return columns[i] < columns[j]
|
||||
}
|
||||
return seenColumns[columns[i]] < seenColumns[columns[j]]
|
||||
})
|
||||
|
||||
models.Sort(results, pk, sk)
|
||||
|
||||
return &models.ResultSet{
|
||||
Columns: columns,
|
||||
Items: results,
|
||||
Items: results,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
51
internal/dynamo-browse/services/tables/service_test.go
Normal file
51
internal/dynamo-browse/services/tables/service_test.go
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
package tables_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/lmika/awstools/internal/dynamo-browse/providers/dynamo"
|
||||
"github.com/lmika/awstools/internal/dynamo-browse/services/tables"
|
||||
"github.com/lmika/awstools/test/testdynamo"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestService_Scan(t *testing.T) {
|
||||
tableName := "test-table"
|
||||
|
||||
client := testdynamo.SetupTestTable(t, tableName, testData)
|
||||
provider := dynamo.NewProvider(client)
|
||||
|
||||
t.Run("return all columns and fields in sorted order", func(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
service := tables.NewService(provider)
|
||||
rs, err := service.Scan(ctx, tableName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Hash first, then range, then columns in alphabetic order
|
||||
assert.Equal(t, rs.Columns, []string{"pk", "sk", "alpha", "beta", "gamma"})
|
||||
assert.Equal(t, rs.Items[0], testdynamo.TestRecordAsItem(t, testData[1]))
|
||||
assert.Equal(t, rs.Items[1], testdynamo.TestRecordAsItem(t, testData[0]))
|
||||
assert.Equal(t, rs.Items[2], testdynamo.TestRecordAsItem(t, testData[2]))
|
||||
})
|
||||
}
|
||||
|
||||
var testData = testdynamo.TestData{
|
||||
{
|
||||
"pk": "abc",
|
||||
"sk": "222",
|
||||
"alpha": "This is another some value",
|
||||
"beta": 1231,
|
||||
},
|
||||
{
|
||||
"pk": "abc",
|
||||
"sk": "111",
|
||||
"alpha": "This is some value",
|
||||
},
|
||||
{
|
||||
"pk": "bbb",
|
||||
"sk": "131",
|
||||
"beta": 2468,
|
||||
"gamma": "foobar",
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue