FQueryParamsTest.m 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * Copyright 2017 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import <Foundation/Foundation.h>
  17. #import <XCTest/XCTest.h>
  18. #import "FEmptyNode.h"
  19. #import "FIndex.h"
  20. #import "FKeyIndex.h"
  21. #import "FLeafNode.h"
  22. #import "FPathIndex.h"
  23. #import "FPriorityIndex.h"
  24. #import "FQueryParams.h"
  25. #import "FSnapshotUtilities.h"
  26. #import "FValueIndex.h"
  27. @interface FQueryParamsTest : XCTestCase
  28. @end
  29. @implementation FQueryParamsTest
  30. - (void)testQueryParamsEquals {
  31. { // Limit equals
  32. FQueryParams *params1 = [[FQueryParams defaultInstance] limitToLast:10];
  33. FQueryParams *params2 = [[FQueryParams defaultInstance] limitTo:10];
  34. FQueryParams *params3 = [[FQueryParams defaultInstance] limitToFirst:10];
  35. FQueryParams *params4 = [[FQueryParams defaultInstance] limitToLast:11];
  36. XCTAssertEqualObjects(params1, params2);
  37. XCTAssertEqual(params1.hash, params2.hash);
  38. XCTAssertFalse([params1 isEqual:params3]);
  39. XCTAssertFalse([params1 isEqual:params4]);
  40. }
  41. { // Index equals
  42. FQueryParams *params1 = [[FQueryParams defaultInstance] orderBy:[FPriorityIndex priorityIndex]];
  43. FQueryParams *params2 = [[FQueryParams defaultInstance] orderBy:[FPriorityIndex priorityIndex]];
  44. FQueryParams *params3 = [[FQueryParams defaultInstance] orderBy:[FKeyIndex keyIndex]];
  45. XCTAssertEqualObjects(params1, params2);
  46. XCTAssertEqual(params1.hash, params2.hash);
  47. XCTAssertFalse([params1 isEqual:params3]);
  48. }
  49. { // startAt equals
  50. FQueryParams *params1 =
  51. [[FQueryParams defaultInstance] startAt:[FSnapshotUtilities nodeFrom:@"value"]];
  52. FQueryParams *params2 =
  53. [[FQueryParams defaultInstance] startAt:[FSnapshotUtilities nodeFrom:@"value"]
  54. childKey:nil];
  55. FQueryParams *params3 =
  56. [[FQueryParams defaultInstance] startAt:[FSnapshotUtilities nodeFrom:@"value-2"]];
  57. XCTAssertEqualObjects(params1, params2);
  58. XCTAssertEqual(params1.hash, params2.hash);
  59. XCTAssertFalse([params1 isEqual:params3]);
  60. }
  61. { // startAt with childkey equals
  62. FQueryParams *params1 = [[FQueryParams defaultInstance] startAt:[FEmptyNode emptyNode]
  63. childKey:@"key"];
  64. FQueryParams *params2 = [[FQueryParams defaultInstance] startAt:[FEmptyNode emptyNode]
  65. childKey:@"key"];
  66. FQueryParams *params3 = [[FQueryParams defaultInstance] startAt:[FEmptyNode emptyNode]
  67. childKey:@"other-key"];
  68. XCTAssertEqualObjects(params1, params2);
  69. XCTAssertEqual(params1.hash, params2.hash);
  70. XCTAssertFalse([params1 isEqual:params3]);
  71. }
  72. { // endAt equals
  73. FQueryParams *params1 =
  74. [[FQueryParams defaultInstance] endAt:[FSnapshotUtilities nodeFrom:@"value"]];
  75. FQueryParams *params2 =
  76. [[FQueryParams defaultInstance] endAt:[FSnapshotUtilities nodeFrom:@"value"] childKey:nil];
  77. FQueryParams *params3 =
  78. [[FQueryParams defaultInstance] endAt:[FSnapshotUtilities nodeFrom:@"value-2"]];
  79. XCTAssertEqualObjects(params1, params2);
  80. XCTAssertEqual(params1.hash, params2.hash);
  81. XCTAssertFalse([params1 isEqual:params3]);
  82. }
  83. { // endAt with childkey equals
  84. FQueryParams *params1 = [[FQueryParams defaultInstance] endAt:[FEmptyNode emptyNode]
  85. childKey:@"key"];
  86. FQueryParams *params2 = [[FQueryParams defaultInstance] endAt:[FEmptyNode emptyNode]
  87. childKey:@"key"];
  88. FQueryParams *params3 = [[FQueryParams defaultInstance] endAt:[FEmptyNode emptyNode]
  89. childKey:@"other-key"];
  90. XCTAssertEqualObjects(params1, params2);
  91. XCTAssertEqual(params1.hash, params2.hash);
  92. XCTAssertFalse([params1 isEqual:params3]);
  93. }
  94. { // Limit/startAt equals
  95. FQueryParams *params1 = [[[FQueryParams defaultInstance] limitToFirst:10]
  96. startAt:[FSnapshotUtilities nodeFrom:@"value"]];
  97. FQueryParams *params2 = [[[FQueryParams defaultInstance] limitTo:10]
  98. startAt:[FSnapshotUtilities nodeFrom:@"value"]];
  99. FQueryParams *params3 = [[[FQueryParams defaultInstance] limitTo:10]
  100. startAt:[FSnapshotUtilities nodeFrom:@"value-2"]];
  101. XCTAssertEqualObjects(params1, params2);
  102. XCTAssertEqual(params1.hash, params2.hash);
  103. XCTAssertFalse([params1 isEqual:params3]);
  104. }
  105. }
  106. - (void)testFromDictionaryEquals {
  107. FQueryParams *params1 = [[[[[FQueryParams defaultInstance] limitToLast:10]
  108. startAt:[FSnapshotUtilities nodeFrom:@"start-value"]
  109. childKey:@"child-key-2"] endAt:[FSnapshotUtilities nodeFrom:@"end-value"]
  110. childKey:@"child-key-2"] orderBy:[FKeyIndex keyIndex]];
  111. XCTAssertEqualObjects(params1, [FQueryParams fromQueryObject:params1.wireProtocolParams]);
  112. XCTAssertEqual(params1.hash, [FQueryParams fromQueryObject:params1.wireProtocolParams].hash);
  113. }
  114. - (void)testCanCreateAllIndexes {
  115. FQueryParams *params1 = [[FQueryParams defaultInstance] orderBy:[FKeyIndex keyIndex]];
  116. FQueryParams *params2 = [[FQueryParams defaultInstance] orderBy:[FValueIndex valueIndex]];
  117. FQueryParams *params3 = [[FQueryParams defaultInstance] orderBy:[FPriorityIndex priorityIndex]];
  118. FQueryParams *params4 = [[FQueryParams defaultInstance]
  119. orderBy:[[FPathIndex alloc] initWithPath:[[FPath alloc] initWith:@"subkey"]]];
  120. XCTAssertEqualObjects(params1, [FQueryParams fromQueryObject:params1.wireProtocolParams]);
  121. XCTAssertEqualObjects(params2, [FQueryParams fromQueryObject:params2.wireProtocolParams]);
  122. XCTAssertEqualObjects(params3, [FQueryParams fromQueryObject:params3.wireProtocolParams]);
  123. XCTAssertEqualObjects(params4, [FQueryParams fromQueryObject:params4.wireProtocolParams]);
  124. XCTAssertEqual(params1.hash, [FQueryParams fromQueryObject:params1.wireProtocolParams].hash);
  125. XCTAssertEqual(params2.hash, [FQueryParams fromQueryObject:params2.wireProtocolParams].hash);
  126. XCTAssertEqual(params3.hash, [FQueryParams fromQueryObject:params3.wireProtocolParams].hash);
  127. XCTAssertEqual(params4.hash, [FQueryParams fromQueryObject:params4.wireProtocolParams].hash);
  128. }
  129. - (void)testDifferentLimits {
  130. FQueryParams *params1 = [[FQueryParams defaultInstance] limitToFirst:10];
  131. FQueryParams *params2 = [[FQueryParams defaultInstance] limitToLast:10];
  132. FQueryParams *params3 = [[FQueryParams defaultInstance] limitTo:10];
  133. XCTAssertEqualObjects(params1, [FQueryParams fromQueryObject:params1.wireProtocolParams]);
  134. XCTAssertEqualObjects(params2, [FQueryParams fromQueryObject:params2.wireProtocolParams]);
  135. XCTAssertEqualObjects(params3, [FQueryParams fromQueryObject:params3.wireProtocolParams]);
  136. // 2 and 3 are equivalent
  137. XCTAssertEqualObjects(params2, [FQueryParams fromQueryObject:params3.wireProtocolParams]);
  138. XCTAssertEqual(params1.hash, [FQueryParams fromQueryObject:params1.wireProtocolParams].hash);
  139. XCTAssertEqual(params2.hash, [FQueryParams fromQueryObject:params2.wireProtocolParams].hash);
  140. XCTAssertEqual(params3.hash, [FQueryParams fromQueryObject:params3.wireProtocolParams].hash);
  141. // 2 and 3 are equivalent
  142. XCTAssertEqual(params2.hash, [FQueryParams fromQueryObject:params3.wireProtocolParams].hash);
  143. }
  144. - (void)testStartAtNullIsSerializable {
  145. FQueryParams *params = [FQueryParams defaultInstance];
  146. params = [params startAt:[FEmptyNode emptyNode] childKey:@"key"];
  147. NSDictionary *dict = [params wireProtocolParams];
  148. FQueryParams *parsed = [FQueryParams fromQueryObject:dict];
  149. XCTAssertEqualObjects(parsed, params);
  150. XCTAssertTrue([parsed hasStart]);
  151. }
  152. - (void)testEndAtNullIsSerializable {
  153. FQueryParams *params = [FQueryParams defaultInstance];
  154. params = [params endAt:[FEmptyNode emptyNode] childKey:@"key"];
  155. NSDictionary *dict = [params wireProtocolParams];
  156. FQueryParams *parsed = [FQueryParams fromQueryObject:dict];
  157. XCTAssertEqualObjects(parsed, params);
  158. XCTAssertTrue([parsed hasEnd]);
  159. }
  160. @end