FQueryParamsTest.m 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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 "FQueryParams.h"
  19. #import "FIndex.h"
  20. #import "FPriorityIndex.h"
  21. #import "FValueIndex.h"
  22. #import "FLeafNode.h"
  23. #import "FPathIndex.h"
  24. #import "FSnapshotUtilities.h"
  25. #import "FKeyIndex.h"
  26. #import "FEmptyNode.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 = [[FQueryParams defaultInstance] startAt:[FSnapshotUtilities nodeFrom:@"value"]];
  51. FQueryParams *params2 = [[FQueryParams defaultInstance] startAt:[FSnapshotUtilities nodeFrom:@"value"] childKey:nil];
  52. FQueryParams *params3 = [[FQueryParams defaultInstance] startAt:[FSnapshotUtilities nodeFrom:@"value-2"]];
  53. XCTAssertEqualObjects(params1, params2);
  54. XCTAssertEqual(params1.hash, params2.hash);
  55. XCTAssertFalse([params1 isEqual:params3]);
  56. }
  57. { // startAt with childkey equals
  58. FQueryParams *params1 = [[FQueryParams defaultInstance] startAt:[FEmptyNode emptyNode] childKey:@"key"];
  59. FQueryParams *params2 = [[FQueryParams defaultInstance] startAt:[FEmptyNode emptyNode] childKey:@"key"];
  60. FQueryParams *params3 = [[FQueryParams defaultInstance] startAt:[FEmptyNode emptyNode] childKey:@"other-key"];
  61. XCTAssertEqualObjects(params1, params2);
  62. XCTAssertEqual(params1.hash, params2.hash);
  63. XCTAssertFalse([params1 isEqual:params3]);
  64. }
  65. { // endAt equals
  66. FQueryParams *params1 = [[FQueryParams defaultInstance] endAt:[FSnapshotUtilities nodeFrom:@"value"]];
  67. FQueryParams *params2 = [[FQueryParams defaultInstance] endAt:[FSnapshotUtilities nodeFrom:@"value"] childKey:nil];
  68. FQueryParams *params3 = [[FQueryParams defaultInstance] endAt:[FSnapshotUtilities nodeFrom:@"value-2"]];
  69. XCTAssertEqualObjects(params1, params2);
  70. XCTAssertEqual(params1.hash, params2.hash);
  71. XCTAssertFalse([params1 isEqual:params3]);
  72. }
  73. { // endAt with childkey equals
  74. FQueryParams *params1 = [[FQueryParams defaultInstance] endAt:[FEmptyNode emptyNode] childKey:@"key"];
  75. FQueryParams *params2 = [[FQueryParams defaultInstance] endAt:[FEmptyNode emptyNode] childKey:@"key"];
  76. FQueryParams *params3 = [[FQueryParams defaultInstance] endAt:[FEmptyNode emptyNode] childKey:@"other-key"];
  77. XCTAssertEqualObjects(params1, params2);
  78. XCTAssertEqual(params1.hash, params2.hash);
  79. XCTAssertFalse([params1 isEqual:params3]);
  80. }
  81. { // Limit/startAt equals
  82. FQueryParams *params1 = [[[FQueryParams defaultInstance] limitToFirst:10] startAt:[FSnapshotUtilities nodeFrom:@"value"]];
  83. FQueryParams *params2 = [[[FQueryParams defaultInstance] limitTo:10] startAt:[FSnapshotUtilities nodeFrom:@"value"]];
  84. FQueryParams *params3 = [[[FQueryParams defaultInstance] limitTo:10] startAt:[FSnapshotUtilities nodeFrom:@"value-2"]];
  85. XCTAssertEqualObjects(params1, params2);
  86. XCTAssertEqual(params1.hash, params2.hash);
  87. XCTAssertFalse([params1 isEqual:params3]);
  88. }
  89. }
  90. - (void)testFromDictionaryEquals {
  91. FQueryParams *params1 = [[[[[FQueryParams defaultInstance] limitToLast:10]
  92. startAt:[FSnapshotUtilities nodeFrom:@"start-value"] childKey:@"child-key-2"]
  93. endAt:[FSnapshotUtilities nodeFrom:@"end-value"] childKey:@"child-key-2"]
  94. orderBy:[FKeyIndex keyIndex]];
  95. XCTAssertEqualObjects(params1, [FQueryParams fromQueryObject:params1.wireProtocolParams]);
  96. XCTAssertEqual(params1.hash, [FQueryParams fromQueryObject:params1.wireProtocolParams].hash);
  97. }
  98. - (void)testCanCreateAllIndexes {
  99. FQueryParams *params1 = [[FQueryParams defaultInstance] orderBy:[FKeyIndex keyIndex]];
  100. FQueryParams *params2 = [[FQueryParams defaultInstance] orderBy:[FValueIndex valueIndex]];
  101. FQueryParams *params3 = [[FQueryParams defaultInstance] orderBy:[FPriorityIndex priorityIndex]];
  102. FQueryParams *params4 = [[FQueryParams defaultInstance] orderBy:[[FPathIndex alloc] initWithPath:[[FPath alloc] initWith:@"subkey"]]];
  103. XCTAssertEqualObjects(params1, [FQueryParams fromQueryObject:params1.wireProtocolParams]);
  104. XCTAssertEqualObjects(params2, [FQueryParams fromQueryObject:params2.wireProtocolParams]);
  105. XCTAssertEqualObjects(params3, [FQueryParams fromQueryObject:params3.wireProtocolParams]);
  106. XCTAssertEqualObjects(params4, [FQueryParams fromQueryObject:params4.wireProtocolParams]);
  107. XCTAssertEqual(params1.hash, [FQueryParams fromQueryObject:params1.wireProtocolParams].hash);
  108. XCTAssertEqual(params2.hash, [FQueryParams fromQueryObject:params2.wireProtocolParams].hash);
  109. XCTAssertEqual(params3.hash, [FQueryParams fromQueryObject:params3.wireProtocolParams].hash);
  110. XCTAssertEqual(params4.hash, [FQueryParams fromQueryObject:params4.wireProtocolParams].hash);
  111. }
  112. - (void)testDifferentLimits {
  113. FQueryParams *params1 = [[FQueryParams defaultInstance] limitToFirst:10];
  114. FQueryParams *params2 = [[FQueryParams defaultInstance] limitToLast:10];
  115. FQueryParams *params3 = [[FQueryParams defaultInstance] limitTo:10];
  116. XCTAssertEqualObjects(params1, [FQueryParams fromQueryObject:params1.wireProtocolParams]);
  117. XCTAssertEqualObjects(params2, [FQueryParams fromQueryObject:params2.wireProtocolParams]);
  118. XCTAssertEqualObjects(params3, [FQueryParams fromQueryObject:params3.wireProtocolParams]);
  119. // 2 and 3 are equivalent
  120. XCTAssertEqualObjects(params2, [FQueryParams fromQueryObject:params3.wireProtocolParams]);
  121. XCTAssertEqual(params1.hash, [FQueryParams fromQueryObject:params1.wireProtocolParams].hash);
  122. XCTAssertEqual(params2.hash, [FQueryParams fromQueryObject:params2.wireProtocolParams].hash);
  123. XCTAssertEqual(params3.hash, [FQueryParams fromQueryObject:params3.wireProtocolParams].hash);
  124. // 2 and 3 are equivalent
  125. XCTAssertEqual(params2.hash, [FQueryParams fromQueryObject:params3.wireProtocolParams].hash);
  126. }
  127. - (void)testStartAtNullIsSerializable {
  128. FQueryParams *params = [FQueryParams defaultInstance];
  129. params = [params startAt:[FEmptyNode emptyNode] childKey:@"key"];
  130. NSDictionary *dict = [params wireProtocolParams];
  131. FQueryParams *parsed = [FQueryParams fromQueryObject:dict];
  132. XCTAssertEqualObjects(parsed, params);
  133. XCTAssertTrue([parsed hasStart]);
  134. }
  135. - (void)testEndAtNullIsSerializable {
  136. FQueryParams *params = [FQueryParams defaultInstance];
  137. params = [params endAt:[FEmptyNode emptyNode] childKey:@"key"];
  138. NSDictionary *dict = [params wireProtocolParams];
  139. FQueryParams *parsed = [FQueryParams fromQueryObject:dict];
  140. XCTAssertEqualObjects(parsed, params);
  141. XCTAssertTrue([parsed hasEnd]);
  142. }
  143. @end