1: using System;
2: using System.Collections.Generic;
3: using Xunit;
4: using XunitExt;
5:
6: namespace SquaredRoot.Collections.Generic.Tests
7: {
8: public class PagedListFacts
9: {
10: [Fact]
11: public void Null_Data_Set_Doesnt_Throw_Exception()
12: {
13: //act
14: Assert.ThrowsDelegate act = () => new PagedList<object>( null, 0, 10 );
15:
16: //assert
17: Assert.DoesNotThrow( act );
18: }
19:
20: [Fact]
21: public void PageIndex_Below_Zero_Throws_ArgumentOutOfRange()
22: {
23: //arrange
24: var data = new[]{ 1, 2, 3 };
25:
26: //act
27: Assert.ThrowsDelegate act = () => data.ToPagedList( -1, 1 );
28:
29: //assert
30: Assert.Throws<ArgumentOutOfRangeException>( act );
31: }
32:
33: [Fact]
34: public void PageIndex_Above_RecordCount_Returns_Empty_List()
35: {
36: //arrange
37: var data = new[]{ 1, 2, 3 };
38:
39: //act
40: var pagedList = data.ToPagedList( 2, 3 );
41:
42: //assert
43: Assert.Equal( 0, pagedList.Count );
44: }
45:
46: [Fact]
47: public void PageSize_Below_One_Throws_ArgumentOutOfRange()
48: {
49: //arrange
50: var data = new[]{ 1, 2, 3 };
51:
52: //act
53: Assert.ThrowsDelegate act = () => data.ToPagedList( 0, 0 );
54:
55: //assert
56: Assert.Throws<ArgumentOutOfRangeException>( act );
57: }
58:
59: [Fact]
60: public void Null_Data_Set_Doesnt_Return_Null()
61: {
62: //act
63: var pagedList = new PagedList<object>( null, 0, 10 );
64:
65: //assert
66: Assert.NotNull( pagedList );
67: }
68:
69: [Fact]
70: public void Null_Data_Set_Returns_Zero_Pages()
71: {
72: //act
73: var pagedList = new PagedList<object>( null, 0, 10 );
74:
75: //assert
76: Assert.Equal( 0, pagedList.PageCount );
77: }
78:
79: [Fact]
80: public void Zero_Item_Data_Set_Returns_Zero_Pages()
81: {
82: //arrange
83: var data = new List<object>();
84:
85: //act
86: var pagedList = data.ToPagedList( 0, 10 );
87:
88: //assert
89: Assert.Equal( 0, pagedList.PageCount );
90: }
91:
92: [Fact]
93: public void DataSet_Of_One_Through_Five_PageSize_Of_Two_PageIndex_Of_One_First_Item_Is_Three()
94: {
95: //arrange
96: var data = new[]{ 1, 2, 3, 4, 5 };
97:
98: //act
99: var pagedList = data.ToPagedList( 1, 2 );
100:
101: //assert
102: Assert.Equal( 3, pagedList[0] );
103: }
104:
105: [Fact]
106: public void TotalCount_Is_Preserved()
107: {
108: //arrange
109: var data = new[]{ 1, 2, 3, 4, 5 };
110:
111: //act
112: var pagedList = data.ToPagedList( 1, 2 );
113:
114: //assert
115: Assert.Equal( 5, pagedList.TotalItemCount );
116: }
117:
118: [Fact]
119: public void PageIndex_Is_Preserved()
120: {
121: //arrange
122: var data = new[]{ 1, 2, 3, 4, 5 };
123:
124: //act
125: var pagedList = data.ToPagedList( 1, 2 );
126:
127: //assert
128: Assert.Equal( 1, pagedList.PageIndex );
129: }
130:
131: [Fact]
132: public void PageSize_Is_Preserved()
133: {
134: //arrange
135: var data = new[]{ 1, 2, 3, 4, 5 };
136:
137: //act
138: var pagedList = data.ToPagedList( 1, 2 );
139:
140: //assert
141: Assert.Equal( 2, pagedList.PageSize );
142: }
143:
144: [Fact]
145: public void Data_Is_Filtered_By_PageSize()
146: {
147: //arrange
148: var data = new[]{ 1, 2, 3, 4, 5 };
149:
150: //act
151: var pagedList = data.ToPagedList( 1, 2 );
152:
153: //assert
154: Assert.Equal( 2, pagedList.Count );
155:
156: //### related test below
157:
158: //act
159: pagedList = data.ToPagedList( 2, 2 );
160:
161: //assert
162: Assert.Equal( 1, pagedList.Count );
163: }
164:
165: [Fact]
166: public void DataSet_OneThroughThree_PageSize_One_PageIndex_Two_HasNextPage_False()
167: {
168: //arrange
169: var data = new[]{ 1, 2, 3 };
170:
171: //act
172: var pagedList = data.ToPagedList( 2, 1 );
173:
174: //assert
175: Assert.Equal( false, pagedList.HasNextPage );
176: }
177:
178: [Fact]
179: public void DataSet_OneThroughThree_PageSize_One_PageIndex_Two_IsLastPage_True()
180: {
181: //arrange
182: var data = new[]{ 1, 2, 3 };
183:
184: //act
185: var pagedList = data.ToPagedList( 2, 1 );
186:
187: //assert
188: Assert.Equal( true, pagedList.IsLastPage );
189: }
190:
191: [Theory]
192: [InlineData( new[] { 1, 2, 3 }, 0, 1 )]
193: [InlineData( new[] { 1, 2, 3 }, 1, 2 )]
194: [InlineData( new[] { 1, 2, 3 }, 2, 3 )]
195: public void Theory_PageNumber_Is_PageIndex_Plus_One( int[] integers, int pageIndex, int expectedPageNumber )
196: {
197: //arrange
198: var data = integers;
199:
200: //act
201: var pagedList = data.ToPagedList( pageIndex, 1 );
202:
203: //assert
204: Assert.Equal( expectedPageNumber, pagedList.PageNumber );
205: }
206:
207: [Theory]
208: [InlineData( new[]{ 1, 2, 3 }, 0, 1, false, true )]
209: [InlineData( new[]{ 1, 2, 3 }, 1, 1, true, true )]
210: [InlineData( new[]{ 1, 2, 3 }, 2, 1, true, false )]
211: public void Theory_HasPreviousPage_And_HasNextPage_Are_Correct( int[] integers, int pageIndex, int pageSize, bool expectedHasPrevious, bool expectedHasNext )
212: {
213: //arrange
214: var data = integers;
215:
216: //act
217: var pagedList = data.ToPagedList( pageIndex, pageSize );
218:
219: //assert
220: Assert.Equal( expectedHasPrevious, pagedList.HasPreviousPage );
221: Assert.Equal( expectedHasNext, pagedList.HasNextPage );
222: }
223:
224: [Theory]
225: [InlineData( new[]{ 1, 2, 3 }, 0, 1, true, false )]
226: [InlineData( new[]{ 1, 2, 3 }, 1, 1, false, false )]
227: [InlineData( new[]{ 1, 2, 3 }, 2, 1, false, true )]
228: public void Theory_IsFirstPage_And_IsLastPage_Are_Correct( int[] integers, int pageIndex, int pageSize, bool expectedIsFirstPage, bool expectedIsLastPage )
229: {
230: //arrange
231: var data = integers;
232:
233: //act
234: var pagedList = data.ToPagedList( pageIndex, pageSize );
235:
236: //assert
237: Assert.Equal( expectedIsFirstPage, pagedList.IsFirstPage );
238: Assert.Equal( expectedIsLastPage, pagedList.IsLastPage );
239: }
240:
241: [Theory]
242: [InlineData( new[]{ 1, 2, 3 }, 1, 3 )]
243: [InlineData( new[]{ 1, 2, 3 }, 3, 1 )]
244: [InlineData( new[]{ 1 }, 1, 1 )]
245: [InlineData( new[]{ 1, 2, 3 }, 2, 2 )]
246: [InlineData( new[]{ 1, 2, 3, 4 }, 2, 2 )]
247: [InlineData( new[]{ 1, 2, 3, 4, 5 }, 2, 3 )]
248: public void Theory_PageCount_Is_Correct( int[] integers, int pageSize, int expectedNumberOfPages )
249: {
250: //arrange
251: var data = integers;
252:
253: //act
254: var pagedList = data.ToPagedList( 0, pageSize );
255:
256: //assert
257: Assert.Equal( expectedNumberOfPages, pagedList.PageCount );
258: }
259: }
260: }