Skip to content

Commit 8525cc9

Browse files
authored
fix: Add back testing for all types (#1015)
There is still more work to do to make the testing function "production" ready because they become quite vital and some of them are public APIs so we need to think how to generalize them correctly so they are testable, expand etc.. but this should be a good start just so we can start releasing some destinations
1 parent d1b2b73 commit 8525cc9

File tree

6 files changed

+252
-225
lines changed

6 files changed

+252
-225
lines changed

plugin/testing_upsert.go

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import (
1212
"github.com/cloudquery/plugin-sdk/v4/schema"
1313
)
1414

15-
func (s *WriterTestSuite) testUpsert(ctx context.Context) error {
16-
tableName := fmt.Sprintf("cq_test_upsert_%d", time.Now().Unix())
15+
func (s *WriterTestSuite) testUpsertBasic(ctx context.Context) error {
16+
tableName := fmt.Sprintf("cq_upsert_basic_%d", time.Now().Unix())
1717
table := &schema.Table{
1818
Name: tableName,
1919
Columns: []schema.Column{
@@ -63,3 +63,50 @@ func (s *WriterTestSuite) testUpsert(ctx context.Context) error {
6363

6464
return nil
6565
}
66+
67+
func (s *WriterTestSuite) testUpsertAll(ctx context.Context) error {
68+
tableName := fmt.Sprintf("cq_upsert_all_%d", time.Now().Unix())
69+
table := schema.TestTable(tableName, s.genDatOptions)
70+
table.Columns = append(table.Columns, schema.Column{Name: "name", Type: arrow.BinaryTypes.String, PrimaryKey: true})
71+
if err := s.plugin.writeOne(ctx, &message.WriteMigrateTable{
72+
Table: table,
73+
}); err != nil {
74+
return fmt.Errorf("failed to create table: %w", err)
75+
}
76+
77+
records := schema.GenTestData(table, schema.GenTestDataOptions{MaxRows: 2})
78+
record := records[0]
79+
80+
if err := s.plugin.writeOne(ctx, &message.WriteInsert{
81+
Record: record,
82+
}); err != nil {
83+
return fmt.Errorf("failed to insert record: %w", err)
84+
}
85+
86+
records, err := s.plugin.readAll(ctx, table)
87+
if err != nil {
88+
return fmt.Errorf("failed to readAll: %w", err)
89+
}
90+
totalItems := TotalRows(records)
91+
if totalItems != 1 {
92+
return fmt.Errorf("expected 1 item, got %d", totalItems)
93+
}
94+
95+
if err := s.plugin.writeOne(ctx, &message.WriteInsert{
96+
Record: record,
97+
}); err != nil {
98+
return fmt.Errorf("failed to insert record: %w", err)
99+
}
100+
101+
records, err = s.plugin.readAll(ctx, table)
102+
if err != nil {
103+
return fmt.Errorf("failed to sync: %w", err)
104+
}
105+
106+
totalItems = TotalRows(records)
107+
if totalItems != 1 {
108+
return fmt.Errorf("expected 1 item, got %d", totalItems)
109+
}
110+
111+
return nil
112+
}

plugin/testing_write.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,32 @@ func TestWriterSuiteRunner(t *testing.T, p *Plugin, tests WriterTestSuiteTests,
9090
if suite.tests.SkipUpsert {
9191
t.Skip("skipping " + t.Name())
9292
}
93-
if err := suite.testUpsert(ctx); err != nil {
94-
t.Fatal(err)
95-
}
93+
t.Run("Basic", func(t *testing.T) {
94+
if err := suite.testUpsertBasic(ctx); err != nil {
95+
t.Fatal(err)
96+
}
97+
})
98+
t.Run("All", func(t *testing.T) {
99+
if err := suite.testUpsertAll(ctx); err != nil {
100+
t.Fatal(err)
101+
}
102+
})
96103
})
97104

98105
t.Run("TestInsert", func(t *testing.T) {
99106
if suite.tests.SkipInsert {
100107
t.Skip("skipping " + t.Name())
101108
}
102-
if err := suite.testInsert(ctx); err != nil {
103-
t.Fatal(err)
104-
}
109+
t.Run("Basic", func(t *testing.T) {
110+
if err := suite.testInsertBasic(ctx); err != nil {
111+
t.Fatal(err)
112+
}
113+
})
114+
t.Run("All", func(t *testing.T) {
115+
if err := suite.testInsertAll(ctx); err != nil {
116+
t.Fatal(err)
117+
}
118+
})
105119
})
106120

107121
t.Run("TestDeleteStale", func(t *testing.T) {

plugin/testing_write_insert.go

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ func TotalRows(records []arrow.Record) int64 {
2020
return totalRows
2121
}
2222

23-
func (s *WriterTestSuite) testInsert(ctx context.Context) error {
24-
tableName := fmt.Sprintf("cq_test_insert_%d", time.Now().Unix())
23+
func (s *WriterTestSuite) testInsertBasic(ctx context.Context) error {
24+
tableName := fmt.Sprintf("cq_insert_basic_%d", time.Now().Unix())
2525
table := &schema.Table{
2626
Name: tableName,
2727
Columns: []schema.Column{
@@ -71,3 +71,50 @@ func (s *WriterTestSuite) testInsert(ctx context.Context) error {
7171

7272
return nil
7373
}
74+
75+
func (s *WriterTestSuite) testInsertAll(ctx context.Context) error {
76+
tableName := fmt.Sprintf("cq_insert_all_%d", time.Now().Unix())
77+
table := schema.TestTable(tableName, s.genDatOptions)
78+
if err := s.plugin.writeOne(ctx, &message.WriteMigrateTable{
79+
Table: table,
80+
}); err != nil {
81+
return fmt.Errorf("failed to create table: %w", err)
82+
}
83+
records := schema.GenTestData(table, schema.GenTestDataOptions{
84+
MaxRows: 2,
85+
})
86+
record := records[0]
87+
88+
if err := s.plugin.writeOne(ctx, &message.WriteInsert{
89+
Record: record,
90+
}); err != nil {
91+
return fmt.Errorf("failed to insert record: %w", err)
92+
}
93+
readRecords, err := s.plugin.readAll(ctx, table)
94+
if err != nil {
95+
return fmt.Errorf("failed to sync: %w", err)
96+
}
97+
98+
totalItems := TotalRows(readRecords)
99+
if totalItems != 1 {
100+
return fmt.Errorf("expected 1 item, got %d", totalItems)
101+
}
102+
103+
if err := s.plugin.writeOne(ctx, &message.WriteInsert{
104+
Record: record,
105+
}); err != nil {
106+
return fmt.Errorf("failed to insert record: %w", err)
107+
}
108+
109+
readRecords, err = s.plugin.readAll(ctx, table)
110+
if err != nil {
111+
return fmt.Errorf("failed to sync: %w", err)
112+
}
113+
114+
totalItems = TotalRows(readRecords)
115+
if totalItems != 2 {
116+
return fmt.Errorf("expected 2 items, got %d", totalItems)
117+
}
118+
119+
return nil
120+
}

0 commit comments

Comments
 (0)