|
11 | 11 | using Microsoft.Extensions.Logging;
|
12 | 12 | using JsonApiDotNetCore.Services;
|
13 | 13 | using System.Threading.Tasks;
|
14 |
| -using System.Linq; |
15 |
| - |
| 14 | +using System.Linq; |
| 15 | +using System.Collections; |
| 16 | +using JsonApiDotNetCore.Request; |
| 17 | + |
16 | 18 | namespace UnitTests.Data
|
17 | 19 | {
|
18 | 20 | public class DefaultEntityRepository_Tests : JsonApiControllerMixin
|
@@ -49,10 +51,10 @@ public async Task UpdateAsync_Updates_Attributes_In_AttributesToUpdate()
|
49 | 51 | {
|
50 | 52 | Id = _todoItem.Id,
|
51 | 53 | Description = Guid.NewGuid().ToString()
|
52 |
| - }; |
53 |
| - |
| 54 | + }; |
| 55 | + |
54 | 56 | var descAttr = new AttrAttribute("description", "Description");
|
55 |
| - descAttr.PropertyInfo = typeof(TodoItem).GetProperty(nameof(TodoItem.Description)); |
| 57 | + descAttr.PropertyInfo = typeof(TodoItem).GetProperty(nameof(TodoItem.Description)); |
56 | 58 |
|
57 | 59 | _attrsToUpdate = new Dictionary<AttrAttribute, object>
|
58 | 60 | {
|
@@ -91,87 +93,95 @@ private DefaultEntityRepository<TodoItem> GetRepository()
|
91 | 93 | .Setup(m => m.RelationshipsToUpdate)
|
92 | 94 | .Returns(_relationshipsToUpdate);
|
93 | 95 |
|
| 96 | + _jsonApiContextMock |
| 97 | + .Setup(m => m.HasManyRelationshipPointers) |
| 98 | + .Returns(new HasManyRelationshipPointers()); |
| 99 | + |
| 100 | + _jsonApiContextMock |
| 101 | + .Setup(m => m.HasOneRelationshipPointers) |
| 102 | + .Returns(new HasOneRelationshipPointers()); |
| 103 | + |
94 | 104 | return new DefaultEntityRepository<TodoItem>(
|
95 | 105 | _loggFactoryMock.Object,
|
96 | 106 | _jsonApiContextMock.Object,
|
97 | 107 | _contextResolverMock.Object);
|
98 |
| - } |
99 |
| - |
100 |
| - [Theory] |
101 |
| - [InlineData(0)] |
102 |
| - [InlineData(-1)] |
103 |
| - [InlineData(-10)] |
104 |
| - public async Task Page_When_PageSize_Is_NonPositive_Does_Nothing(int pageSize) |
105 |
| - { |
106 |
| - var todoItems = DbSetMock.Create(TodoItems(2, 3, 1)).Object; |
107 |
| - var repository = GetRepository(); |
108 |
| - |
109 |
| - var result = await repository.PageAsync(todoItems, pageSize, 3); |
110 |
| - |
111 |
| - Assert.Equal(TodoItems(2, 3, 1), result, new IdComparer<TodoItem>()); |
112 |
| - } |
113 |
| - |
114 |
| - [Fact] |
115 |
| - public async Task Page_When_PageNumber_Is_Zero_Pretends_PageNumber_Is_One() |
116 |
| - { |
117 |
| - var todoItems = DbSetMock.Create(TodoItems(2, 3, 1)).Object; |
118 |
| - var repository = GetRepository(); |
119 |
| - |
120 |
| - var result = await repository.PageAsync(todoItems, 1, 0); |
121 |
| - |
122 |
| - Assert.Equal(TodoItems(2), result, new IdComparer<TodoItem>()); |
123 |
| - } |
124 |
| - |
125 |
| - [Fact] |
126 |
| - public async Task Page_When_PageNumber_Of_PageSize_Does_Not_Exist_Return_Empty_Queryable() |
127 |
| - { |
128 |
| - var todoItems = DbSetMock.Create(TodoItems(2, 3, 1)).Object; |
129 |
| - var repository = GetRepository(); |
130 |
| - |
131 |
| - var result = await repository.PageAsync(todoItems, 2, 3); |
132 |
| - |
133 |
| - Assert.Empty(result); |
134 |
| - } |
135 |
| - |
136 |
| - [Theory] |
137 |
| - [InlineData(3, 2, new[] { 4, 5, 6 })] |
138 |
| - [InlineData(8, 2, new[] { 9 })] |
139 |
| - [InlineData(20, 1, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 })] |
140 |
| - public async Task Page_When_PageNumber_Is_Positive_Returns_PageNumberTh_Page_Of_Size_PageSize(int pageSize, int pageNumber, int[] expectedResult) |
141 |
| - { |
142 |
| - var todoItems = DbSetMock.Create(TodoItems(1, 2, 3, 4, 5, 6, 7, 8, 9)).Object; |
143 |
| - var repository = GetRepository(); |
144 |
| - |
145 |
| - var result = await repository.PageAsync(todoItems, pageSize, pageNumber); |
146 |
| - |
147 |
| - Assert.Equal(TodoItems(expectedResult), result, new IdComparer<TodoItem>()); |
148 |
| - } |
149 |
| - |
150 |
| - [Theory] |
151 |
| - [InlineData(6, -1, new[] { 4, 5, 6, 7, 8, 9 })] |
152 |
| - [InlineData(6, -2, new[] { 1, 2, 3 })] |
153 |
| - [InlineData(20, -1, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 })] |
154 |
| - public async Task Page_When_PageNumber_Is_Negative_Returns_PageNumberTh_Page_From_End(int pageSize, int pageNumber, int[] expectedIds) |
155 |
| - { |
156 |
| - var todoItems = DbSetMock.Create(TodoItems(1, 2, 3, 4, 5, 6, 7, 8, 9)).Object; |
157 |
| - var repository = GetRepository(); |
158 |
| - |
159 |
| - var result = await repository.PageAsync(todoItems, pageSize, pageNumber); |
160 |
| - |
161 |
| - Assert.Equal(TodoItems(expectedIds), result, new IdComparer<TodoItem>()); |
162 |
| - } |
163 |
| - |
164 |
| - private static TodoItem[] TodoItems(params int[] ids) |
165 |
| - { |
166 |
| - return ids.Select(id => new TodoItem { Id = id }).ToArray(); |
167 |
| - } |
168 |
| - |
169 |
| - private class IdComparer<T> : IEqualityComparer<T> |
170 |
| - where T : IIdentifiable |
171 |
| - { |
172 |
| - public bool Equals(T x, T y) => x?.StringId == y?.StringId; |
173 |
| - |
174 |
| - public int GetHashCode(T obj) => obj?.StringId?.GetHashCode() ?? 0; |
| 108 | + } |
| 109 | + |
| 110 | + [Theory] |
| 111 | + [InlineData(0)] |
| 112 | + [InlineData(-1)] |
| 113 | + [InlineData(-10)] |
| 114 | + public async Task Page_When_PageSize_Is_NonPositive_Does_Nothing(int pageSize) |
| 115 | + { |
| 116 | + var todoItems = DbSetMock.Create(TodoItems(2, 3, 1)).Object; |
| 117 | + var repository = GetRepository(); |
| 118 | + |
| 119 | + var result = await repository.PageAsync(todoItems, pageSize, 3); |
| 120 | + |
| 121 | + Assert.Equal(TodoItems(2, 3, 1), result, new IdComparer<TodoItem>()); |
| 122 | + } |
| 123 | + |
| 124 | + [Fact] |
| 125 | + public async Task Page_When_PageNumber_Is_Zero_Pretends_PageNumber_Is_One() |
| 126 | + { |
| 127 | + var todoItems = DbSetMock.Create(TodoItems(2, 3, 1)).Object; |
| 128 | + var repository = GetRepository(); |
| 129 | + |
| 130 | + var result = await repository.PageAsync(todoItems, 1, 0); |
| 131 | + |
| 132 | + Assert.Equal(TodoItems(2), result, new IdComparer<TodoItem>()); |
| 133 | + } |
| 134 | + |
| 135 | + [Fact] |
| 136 | + public async Task Page_When_PageNumber_Of_PageSize_Does_Not_Exist_Return_Empty_Queryable() |
| 137 | + { |
| 138 | + var todoItems = DbSetMock.Create(TodoItems(2, 3, 1)).Object; |
| 139 | + var repository = GetRepository(); |
| 140 | + |
| 141 | + var result = await repository.PageAsync(todoItems, 2, 3); |
| 142 | + |
| 143 | + Assert.Empty(result); |
| 144 | + } |
| 145 | + |
| 146 | + [Theory] |
| 147 | + [InlineData(3, 2, new[] { 4, 5, 6 })] |
| 148 | + [InlineData(8, 2, new[] { 9 })] |
| 149 | + [InlineData(20, 1, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 })] |
| 150 | + public async Task Page_When_PageNumber_Is_Positive_Returns_PageNumberTh_Page_Of_Size_PageSize(int pageSize, int pageNumber, int[] expectedResult) |
| 151 | + { |
| 152 | + var todoItems = DbSetMock.Create(TodoItems(1, 2, 3, 4, 5, 6, 7, 8, 9)).Object; |
| 153 | + var repository = GetRepository(); |
| 154 | + |
| 155 | + var result = await repository.PageAsync(todoItems, pageSize, pageNumber); |
| 156 | + |
| 157 | + Assert.Equal(TodoItems(expectedResult), result, new IdComparer<TodoItem>()); |
| 158 | + } |
| 159 | + |
| 160 | + [Theory] |
| 161 | + [InlineData(6, -1, new[] { 4, 5, 6, 7, 8, 9 })] |
| 162 | + [InlineData(6, -2, new[] { 1, 2, 3 })] |
| 163 | + [InlineData(20, -1, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 })] |
| 164 | + public async Task Page_When_PageNumber_Is_Negative_Returns_PageNumberTh_Page_From_End(int pageSize, int pageNumber, int[] expectedIds) |
| 165 | + { |
| 166 | + var todoItems = DbSetMock.Create(TodoItems(1, 2, 3, 4, 5, 6, 7, 8, 9)).Object; |
| 167 | + var repository = GetRepository(); |
| 168 | + |
| 169 | + var result = await repository.PageAsync(todoItems, pageSize, pageNumber); |
| 170 | + |
| 171 | + Assert.Equal(TodoItems(expectedIds), result, new IdComparer<TodoItem>()); |
| 172 | + } |
| 173 | + |
| 174 | + private static TodoItem[] TodoItems(params int[] ids) |
| 175 | + { |
| 176 | + return ids.Select(id => new TodoItem { Id = id }).ToArray(); |
| 177 | + } |
| 178 | + |
| 179 | + private class IdComparer<T> : IEqualityComparer<T> |
| 180 | + where T : IIdentifiable |
| 181 | + { |
| 182 | + public bool Equals(T x, T y) => x?.StringId == y?.StringId; |
| 183 | + |
| 184 | + public int GetHashCode(T obj) => obj?.StringId?.GetHashCode() ?? 0; |
175 | 185 | }
|
176 | 186 | }
|
177 | 187 | }
|
0 commit comments