|
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