Skip to content
This repository was archived by the owner on Jul 12, 2020. It is now read-only.

Commit c66c708

Browse files
committed
Added more unit tests and fixed two issues with cosmos id
1 parent 6ab8a91 commit c66c708

File tree

14 files changed

+506
-75
lines changed

14 files changed

+506
-75
lines changed

Cosmonaut.Console/Program.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ static void Main(string[] args)
3232
var provider = serviceCollection.BuildServiceProvider();
3333

3434
var cosmoStore = provider.GetService<ICosmosStore<Book>>();
35+
cosmoStore.RemoveAsync(x => true).GetAwaiter().GetResult();
36+
3537
var books = new List<Book>();
3638
for (int i = 0; i < 50; i++)
3739
{
3840
books.Add(new Book
3941
{
40-
CosmosId = Guid.NewGuid().ToString(),
42+
Id = Guid.NewGuid().ToString(),
4143
Name = "Test " + i
4244
});
4345
}

Cosmonaut.Models/Book.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
namespace Cosmonaut.Models
55
{
66
[CosmosCollection(Throughput = 1000)]
7-
public class Book : ICosmosEntity
7+
public class Book
88
{
99
public string Name { get; set; }
1010

1111
public TestUser Author { get; set; }
1212

13-
public string CosmosId { get; set; }
13+
[JsonProperty("id")]
14+
public string Id { get; set; }
1415
}
1516
}

Cosmonaut.Tests/Cosmonaut.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.0" />
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.2" />
1111
<PackageReference Include="Moq" Version="4.8.2" />
1212
<PackageReference Include="xunit" Version="2.3.1" />
1313
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />

Cosmonaut.Tests/CosmosAddTests.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Cosmonaut.Exceptions;
4+
using Cosmonaut.Response;
5+
using Xunit;
6+
7+
namespace Cosmonaut.Tests
8+
{
9+
public class CosmosAddTests
10+
{
11+
private readonly ICosmosStore<Dummy> _dummyStore;
12+
13+
public CosmosAddTests()
14+
{
15+
_dummyStore = new InMemoryCosmosStore<Dummy>();
16+
}
17+
18+
[Fact]
19+
public async Task AddValidObjectSuccess()
20+
{
21+
// Arrange
22+
var id = Guid.NewGuid().ToString();
23+
var dummy = new Dummy
24+
{
25+
Id = id,
26+
Name = "Nick"
27+
};
28+
29+
// Act
30+
var expectedResponse = new CosmosResponse<Dummy>(dummy, CosmosOperationStatus.Success);
31+
var result = await _dummyStore.AddAsync(dummy);
32+
33+
//Assert
34+
Assert.Equal(expectedResponse.Entity, result.Entity);
35+
Assert.Equal(expectedResponse.IsSuccess, result.IsSuccess);
36+
}
37+
38+
[Fact]
39+
public async Task AddEntityWithoutIdEmptyGeneratedId()
40+
{
41+
// Arrange
42+
var dummy = new Dummy
43+
{
44+
Name = "Nick"
45+
};
46+
47+
// Act
48+
var result = await _dummyStore.AddAsync(dummy);
49+
50+
//Assert
51+
var isGuid = Guid.TryParse(result.Entity.Id, out var guid);
52+
Assert.True(isGuid);
53+
Assert.NotEqual(Guid.Empty, guid);
54+
}
55+
56+
[Fact]
57+
public async Task AddingEntityWithoutIdThrowsException()
58+
{
59+
// Arrange
60+
var dummy = new
61+
{
62+
Name = "Name"
63+
};
64+
65+
// Act
66+
var addTask = new InMemoryCosmosStore<object>().AddAsync(dummy);
67+
68+
//Assert
69+
await Assert.ThrowsAsync<CosmosEntityWithoutIdException<object>>(() => addTask);
70+
}
71+
}
72+
}

Cosmonaut.Tests/CosmosCrudTests.cs

Lines changed: 0 additions & 37 deletions
This file was deleted.
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using Cosmonaut.Response;
6+
using Xunit;
7+
8+
namespace Cosmonaut.Tests
9+
{
10+
public class CosmosRemoveTests
11+
{
12+
private readonly ICosmosStore<Dummy> _dummyStore;
13+
14+
public CosmosRemoveTests()
15+
{
16+
_dummyStore = new InMemoryCosmosStore<Dummy>();
17+
}
18+
19+
[Fact]
20+
public async Task RemoveEntityRemoves()
21+
{
22+
// Assign
23+
var id = Guid.NewGuid().ToString();
24+
var addedDummy = new Dummy
25+
{
26+
Id = id,
27+
Name = "Test"
28+
};
29+
await _dummyStore.AddAsync(addedDummy);
30+
31+
// Act
32+
var result = await _dummyStore.RemoveAsync(addedDummy);
33+
34+
// Assert
35+
Assert.True(result.IsSuccess);
36+
Assert.Equal(CosmosOperationStatus.Success, result.CosmosOperationStatus);
37+
}
38+
39+
[Fact]
40+
public async Task RemoveByIdRemoves()
41+
{
42+
// Assign
43+
var id = Guid.NewGuid().ToString();
44+
var addedDummy = new Dummy
45+
{
46+
Id = id,
47+
Name = "Test"
48+
};
49+
await _dummyStore.AddAsync(addedDummy);
50+
51+
// Act
52+
var result = await _dummyStore.RemoveByIdAsync(id);
53+
54+
// Assert
55+
Assert.True(result.IsSuccess);
56+
Assert.Equal(CosmosOperationStatus.Success, result.CosmosOperationStatus);
57+
}
58+
59+
[Fact]
60+
public async Task RemoveByExpressionRemoves()
61+
{
62+
// Assign
63+
foreach (var i in Enumerable.Range(0, 10))
64+
{
65+
var id = Guid.NewGuid().ToString();
66+
var addedDummy = new Dummy
67+
{
68+
Id = id,
69+
Name = "Test " + i
70+
};
71+
await _dummyStore.AddAsync(addedDummy);
72+
}
73+
74+
// Act
75+
var result = await _dummyStore.RemoveAsync(x => x.Name.Contains("Test"));
76+
77+
// Assert
78+
Assert.True(result.IsSuccess);
79+
Assert.Empty(result.FailedEntities);
80+
}
81+
82+
[Fact]
83+
public async Task RemoveRangeRemoves()
84+
{
85+
// Assign
86+
var addedList = new List<Dummy>();
87+
foreach (var i in Enumerable.Range(0, 10))
88+
{
89+
var id = Guid.NewGuid().ToString();
90+
var addedDummy = new Dummy
91+
{
92+
Id = id,
93+
Name = "Test " + i
94+
};
95+
await _dummyStore.AddAsync(addedDummy);
96+
addedList.Add(addedDummy);
97+
}
98+
99+
// Act
100+
var result = await _dummyStore.RemoveRangeAsync(addedList);
101+
102+
// Assert
103+
Assert.True(result.IsSuccess);
104+
Assert.Empty(result.FailedEntities);
105+
}
106+
}
107+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using Cosmonaut.Response;
5+
using Xunit;
6+
7+
namespace Cosmonaut.Tests
8+
{
9+
public class CosmosUpdateTests
10+
{
11+
private readonly ICosmosStore<Dummy> _dummyStore;
12+
13+
public CosmosUpdateTests()
14+
{
15+
_dummyStore = new InMemoryCosmosStore<Dummy>();
16+
}
17+
18+
[Fact]
19+
public async Task UpdateEntityUpdates()
20+
{
21+
// Arrange
22+
var id = Guid.NewGuid().ToString();
23+
var addedDummy = new Dummy
24+
{
25+
Id = id,
26+
Name = "Test"
27+
};
28+
var expectedName = "NewTest";
29+
await _dummyStore.AddAsync(addedDummy);
30+
31+
// Act
32+
addedDummy.Name = expectedName;
33+
var result = await _dummyStore.UpdateAsync(addedDummy);
34+
35+
// Assert
36+
Assert.Equal(expectedName, result.Entity.Name);
37+
}
38+
39+
[Fact]
40+
public async Task UpdateRangeUpdatesEntities()
41+
{
42+
// Arrange
43+
var addedEntities = new List<Dummy>();
44+
for (int i = 0; i < 10; i++)
45+
{
46+
var id = Guid.NewGuid().ToString();
47+
var addedDummy = new Dummy
48+
{
49+
Id = id,
50+
Name = "UpdateMe"
51+
};
52+
var added = await _dummyStore.AddAsync(addedDummy);
53+
addedEntities.Add(added.Entity);
54+
}
55+
56+
// Act
57+
var result = await _dummyStore.UpdateRangeAsync();
58+
59+
// Assert
60+
Assert.True(result.IsSuccess);
61+
Assert.Empty(result.FailedEntities);
62+
}
63+
64+
[Fact]
65+
public async Task UpdateEntityThatHasIdChangedFails()
66+
{
67+
// Arrange
68+
var id = Guid.NewGuid().ToString();
69+
var addedDummy = new Dummy
70+
{
71+
Id = id,
72+
Name = "Test"
73+
};
74+
await _dummyStore.AddAsync(addedDummy);
75+
76+
// Act
77+
addedDummy.Id = Guid.NewGuid().ToString();
78+
var result = await _dummyStore.UpdateAsync(addedDummy);
79+
80+
// Assert
81+
Assert.False(result.IsSuccess);
82+
Assert.Equal(CosmosOperationStatus.ResourceNotFound, result.CosmosOperationStatus);
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)