Skip to content

Commit 3dfb727

Browse files
committed
Expand tests
1 parent f34a122 commit 3dfb727

File tree

6 files changed

+301
-37
lines changed

6 files changed

+301
-37
lines changed

test/SqlBulkCopyMerge.Tests/CopyAndMergeTests.cs

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Threading.Tasks;
4+
using Microsoft.Data.SqlClient;
35
using SqlBulkCopyMerge.Models;
46
using SqlBulkCopyMerge.Tests.Docker;
57
using Xunit;
@@ -33,6 +35,30 @@ public async Task CopiesAndMergesCorrectly()
3335
Assert.Equal(1, result.Inserted);
3436
Assert.Equal(2, result.Updated);
3537
Assert.Equal(1, result.Deleted);
38+
39+
var targetRows = await TestUtils.QueryTable(_dockerFixture.TargetSqlDbConnectionString,
40+
$"SELECT [id], [notes], [timestamp] FROM {targetTable}");
41+
Assert.Collection(targetRows, row =>
42+
{
43+
Assert.Equal(1, row[0]);
44+
Assert.Equal("Note 1 unchanged", row[1]);
45+
Assert.Equal(1, ((DateTime)row[2]).Day);
46+
}, row =>
47+
{
48+
Assert.Equal(2, row[0]);
49+
Assert.Equal("Note 2 overwrite", row[1]);
50+
Assert.Equal(2, ((DateTime)row[2]).Day);
51+
}, row =>
52+
{
53+
Assert.Equal(3, row[0]);
54+
Assert.Equal("Note 3 new", row[1]);
55+
Assert.Equal(3, ((DateTime)row[2]).Day);
56+
}, row =>
57+
{
58+
Assert.Equal(4, row[0]);
59+
Assert.Equal(DBNull.Value, row[1]);
60+
Assert.Equal(4, ((DateTime)row[2]).Day);
61+
});
3662
}
3763

3864
[Fact]
@@ -59,6 +85,25 @@ public async Task CopiesAndMergesWithDeletesDisabled()
5985
Assert.Equal(1, result.Inserted);
6086
Assert.Equal(1, result.Updated);
6187
Assert.Equal(0, result.Deleted);
88+
89+
var targetRows = await TestUtils.QueryTable(_dockerFixture.TargetSqlDbConnectionString,
90+
$"SELECT [id], [notes], [timestamp] FROM {targetTable}");
91+
Assert.Collection(targetRows, row =>
92+
{
93+
Assert.Equal(1, row[0]);
94+
Assert.Equal("Note wont be deleted even though it doesnt exist in source", row[1]);
95+
Assert.Equal(1, ((DateTime)row[2]).Day);
96+
}, row =>
97+
{
98+
Assert.Equal(2, row[0]);
99+
Assert.Equal("Note 2 updated", row[1]);
100+
Assert.Equal(2, ((DateTime)row[2]).Day);
101+
}, row =>
102+
{
103+
Assert.Equal(3, row[0]);
104+
Assert.Equal("Note 3 new", row[1]);
105+
Assert.Equal(3, ((DateTime)row[2]).Day);
106+
});
62107
}
63108

64109
[Fact]
@@ -78,5 +123,25 @@ public async Task CopiesAndMergesWithDifferentColumnNames()
78123
Assert.Equal(1, result.Updated);
79124
Assert.Equal(1, result.Deleted);
80125
}
126+
127+
[Fact]
128+
public async Task CopiesAndMergesWhereSourceIsEmpty()
129+
{
130+
var sourceTable = "test_copy_and_merge_where_source_is_empty";
131+
var targetTable = sourceTable;
132+
var result = await _sqlBulkCopyCautiouslyService.CopyAndMerge(sourceTable, targetTable);
133+
Assert.Equal(0, result.Inserted);
134+
Assert.Equal(0, result.Updated);
135+
Assert.Equal(0, result.Deleted);
136+
137+
// Target rows are not deleted when the source query returns nothing
138+
var targetRows = await TestUtils.QueryTable(_dockerFixture.TargetSqlDbConnectionString,
139+
$"SELECT [id], [notes] FROM {targetTable}");
140+
Assert.Collection(targetRows, row =>
141+
{
142+
Assert.Equal(1, row[0]);
143+
Assert.Equal("Note 1 not deleted", row[1]);
144+
});
145+
}
81146
}
82147
}

test/SqlBulkCopyMerge.Tests/CopyLatestTests.cs

Lines changed: 101 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,110 @@ public CopyLatestTests(DockerFixture dockerFixture, ITestOutputHelper output)
2424
}
2525

2626
[Fact]
27-
public async Task CopiesLatestRows()
27+
public async Task CopiesLatestRowsByInt()
2828
{
29-
var sourceTable = "[dbo].[test_copying_latest_rows]";
29+
var sourceTable = "[dbo].[test_copying_latest_rows_by_int]";
3030
var targetTable = sourceTable;
31-
var resultById = await _sqlBulkCopyCautiouslyService.CopyLatest(sourceTable, targetTable);
32-
Assert.Equal(1, resultById);
33-
34-
var byDateColumn = "[timestamp]";
35-
var resultByDate = await _sqlBulkCopyCautiouslyService.CopyLatest(sourceTable, targetTable, byDateColumn);
36-
Assert.Equal(2, resultByDate);
37-
38-
var byVersionControlColumn = "[version_control]";
39-
var resultByVersionControl = await _sqlBulkCopyCautiouslyService.CopyLatest(sourceTable, targetTable, byVersionControlColumn);
40-
Assert.Equal(1, resultByVersionControl);
31+
var rowCount = await _sqlBulkCopyCautiouslyService.CopyLatest(sourceTable, targetTable);
32+
Assert.Equal(1, rowCount);
33+
34+
var targetRows = await TestUtils.QueryTable(_dockerFixture.TargetSqlDbConnectionString,
35+
$"SELECT [id], [notes], [timestamp] FROM {targetTable}");
36+
Assert.Collection(targetRows, row =>
37+
{
38+
Assert.Equal(1, row[0]);
39+
Assert.Equal("Note 1", row[1]);
40+
Assert.Equal(1, ((DateTime)row[2]).Day);
41+
}, row =>
42+
{
43+
Assert.Equal(2, row[0]);
44+
Assert.Equal("Note 2", row[1]);
45+
Assert.Equal(1, ((DateTime)row[2]).Day);
46+
}, row =>
47+
{
48+
Assert.Equal(3, row[0]);
49+
Assert.Equal("Note 3", row[1]);
50+
Assert.Equal(1, ((DateTime)row[2]).Day);
51+
}, row =>
52+
{
53+
Assert.Equal(4, row[0]);
54+
Assert.Equal("Note 4", row[1]);
55+
Assert.Equal(1, ((DateTime)row[2]).Day);
56+
});
57+
}
58+
59+
[Fact]
60+
public async Task CopiesLatestRowsByDate()
61+
{
62+
var sourceTable = "[dbo].[test_copying_latest_rows_by_date]";
63+
var targetTable = sourceTable;
64+
var keyColumn = "[timestamp]";
65+
var rowCount = await _sqlBulkCopyCautiouslyService.CopyLatest(sourceTable, targetTable, keyColumn);
66+
Assert.Equal(3, rowCount);
67+
68+
var targetRows = await TestUtils.QueryTable(_dockerFixture.TargetSqlDbConnectionString,
69+
$"SELECT [id], [notes], [timestamp] FROM {targetTable}");
70+
Assert.Collection(targetRows, row =>
71+
{
72+
Assert.Equal(1, row[0]);
73+
Assert.Equal("Note 1", row[1]);
74+
Assert.Equal(1, ((DateTime)row[2]).Day);
75+
}, row =>
76+
{
77+
Assert.Equal(1, row[0]);
78+
Assert.Equal("Note 2", row[1]);
79+
Assert.Equal(2, ((DateTime)row[2]).Day);
80+
}, row =>
81+
{
82+
Assert.Equal(1, row[0]);
83+
Assert.Equal("Note 3", row[1]);
84+
Assert.Equal(3, ((DateTime)row[2]).Day);
85+
}, row =>
86+
{
87+
Assert.Equal(1, row[0]);
88+
Assert.Equal("Note 4", row[1]);
89+
Assert.Equal(4, ((DateTime)row[2]).Day);
90+
});
4191
}
42-
92+
93+
[Fact]
94+
public async Task CopiesLatestRowsByBinary()
95+
{
96+
var sourceTable = "[dbo].[test_copying_latest_rows_by_binary]";
97+
var targetTable = sourceTable;
98+
var keyColumn = "[version_control]";
99+
var rowCount = await _sqlBulkCopyCautiouslyService.CopyLatest(sourceTable, targetTable, keyColumn);
100+
Assert.Equal(2, rowCount);
101+
102+
var targetRows = await TestUtils.QueryTable(_dockerFixture.TargetSqlDbConnectionString,
103+
$"SELECT [id], [notes], [timestamp], [version_control] FROM {targetTable}");
104+
Assert.Collection(targetRows, row =>
105+
{
106+
Assert.Equal(1, row[0]);
107+
Assert.Equal("Note 1", row[1]);
108+
Assert.Equal(1, ((DateTime)row[2]).Day);
109+
Assert.Equal(1, ((byte[])row[3])[3]);
110+
}, row =>
111+
{
112+
Assert.Equal(1, row[0]);
113+
Assert.Equal("Note 2", row[1]);
114+
Assert.Equal(1, ((DateTime)row[2]).Day);
115+
Assert.Equal(2, ((byte[])row[3])[3]);
116+
}, row =>
117+
{
118+
Assert.Equal(1, row[0]);
119+
Assert.Equal("Note 3", row[1]);
120+
Assert.Equal(1, ((DateTime)row[2]).Day);
121+
Assert.Equal(3, ((byte[])row[3])[3]);
122+
}, row =>
123+
{
124+
Assert.Equal(1, row[0]);
125+
Assert.Equal("Note 4", row[1]);
126+
Assert.Equal(1, ((DateTime)row[2]).Day);
127+
Assert.Equal(4, ((byte[])row[3])[3]);
128+
});
129+
}
130+
43131
[Fact]
44132
public async Task CopiesLatestRowsFromView()
45133
{

test/SqlBulkCopyMerge.Tests/Docker/DockerFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public DockerFixture()
4949

5050
public void Dispose()
5151
{
52-
_dockerSetup.RemoveDockerContainer();
52+
//_dockerSetup.RemoveDockerContainer();
5353
}
5454
}
5555
}

0 commit comments

Comments
 (0)