Skip to content

Commit 1276c2f

Browse files
committed
Add a test for dataset queries
1 parent 1f83599 commit 1276c2f

File tree

5 files changed

+192
-43
lines changed

5 files changed

+192
-43
lines changed

KeenClient.xcodeproj/project.pbxproj

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@
122122
48AC67E11E8348BA00E9C0A9 /* KIOUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48AC67DD1E8348BA00E9C0A9 /* KIOUploader.m */; };
123123
48AC67E21E8348BA00E9C0A9 /* KIOUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48AC67DD1E8348BA00E9C0A9 /* KIOUploader.m */; };
124124
48AC67E31E8348BA00E9C0A9 /* KIOUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 48AC67DD1E8348BA00E9C0A9 /* KIOUploader.m */; };
125+
48CAA1781ED60792003C2008 /* DatasetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 48CAA1771ED60792003C2008 /* DatasetTests.m */; };
126+
48CAA17A1ED609F8003C2008 /* DatasetResponseBody.json in Resources */ = {isa = PBXBuildFile; fileRef = 48CAA1791ED609F8003C2008 /* DatasetResponseBody.json */; };
125127
48E9F0C61EC255D1009A1BF8 /* FileStoreMigrationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E9F0C51EC255D1009A1BF8 /* FileStoreMigrationTests.m */; };
126128
48E9F0C91EC2563F009A1BF8 /* GlobalPropertiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E9F0C81EC2563F009A1BF8 /* GlobalPropertiesTests.m */; };
127129
48E9F0CC1EC25719009A1BF8 /* SdkTrackingHeaderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E9F0CB1EC25719009A1BF8 /* SdkTrackingHeaderTests.m */; };
@@ -179,15 +181,9 @@
179181
017EE13B14E30C96000F3868 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
180182
017EE13D14E30C96000F3868 /* KeenClientTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KeenClientTests.h; sourceTree = "<group>"; };
181183
017EE13E14E30C96000F3868 /* KeenClientTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeenClientTests.m; sourceTree = "<group>"; };
182-
01A9A34414FE953D0082AB22 /* index.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = index.markdown; path = docs/index.markdown; sourceTree = "<group>"; };
183184
01BA1B0314E895BC00CF9F84 /* KeenConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeenConstants.h; sourceTree = "<group>"; };
184185
01BA1B0414E895BC00CF9F84 /* KeenConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeenConstants.m; sourceTree = "<group>"; };
185186
1296396319C10AD200B2B653 /* libKeenClient-Cocoa.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libKeenClient-Cocoa.a"; sourceTree = BUILT_PRODUCTS_DIR; };
186-
1296396419C10AD200B2B653 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
187-
1296396719C10AD200B2B653 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
188-
1296396819C10AD200B2B653 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
189-
1296396919C10AD200B2B653 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
190-
1296397519C10AD200B2B653 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
191187
1296398C19C10B8500B2B653 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
192188
3E1EA1D71C499BE000111153 /* NSNotificationCenter+OCMAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+OCMAdditions.h"; sourceTree = "<group>"; };
193189
3E1EA1D81C499BE000111153 /* OCMArg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OCMArg.h; sourceTree = "<group>"; };
@@ -243,6 +239,9 @@
243239
48AC67D51E833C2D00E9C0A9 /* KIONetwork.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIONetwork.m; sourceTree = "<group>"; };
244240
48AC67DC1E8348BA00E9C0A9 /* KIOUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIOUploader.h; sourceTree = "<group>"; };
245241
48AC67DD1E8348BA00E9C0A9 /* KIOUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIOUploader.m; sourceTree = "<group>"; };
242+
48CAA1761ED60792003C2008 /* DatasetTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatasetTests.h; sourceTree = "<group>"; };
243+
48CAA1771ED60792003C2008 /* DatasetTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DatasetTests.m; sourceTree = "<group>"; };
244+
48CAA1791ED609F8003C2008 /* DatasetResponseBody.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = DatasetResponseBody.json; sourceTree = "<group>"; };
246245
48E9F0C31EC24CA8009A1BF8 /* KIODBStoreTestable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KIODBStoreTestable.h; sourceTree = "<group>"; };
247246
48E9F0C41EC255D1009A1BF8 /* FileStoreMigrationTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileStoreMigrationTests.h; sourceTree = "<group>"; };
248247
48E9F0C51EC255D1009A1BF8 /* FileStoreMigrationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileStoreMigrationTests.m; sourceTree = "<group>"; };
@@ -258,7 +257,6 @@
258257
CA6410D718E37E7C00E53E3C /* KIODBStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIODBStore.m; sourceTree = "<group>"; wrapsLines = 0; };
259258
CA6410E018E39F3A00E53E3C /* KIODBStoreTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIODBStoreTests.h; sourceTree = "<group>"; };
260259
CA6410E118E39F3A00E53E3C /* KIODBStoreTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIODBStoreTests.m; sourceTree = "<group>"; };
261-
CA795C4D18E32BAB00EBDFC4 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
262260
CACE78C918EA0CD800A4AB5B /* KIODBStorePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KIODBStorePrivate.h; sourceTree = "<group>"; };
263261
DE34F6F0197586EE00051390 /* keen_io_sqlite3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = keen_io_sqlite3.c; sourceTree = "<group>"; };
264262
DE34F6F1197586EE00051390 /* keen_io_sqlite3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keen_io_sqlite3.h; sourceTree = "<group>"; };
@@ -358,23 +356,6 @@
358356
name = Products;
359357
sourceTree = "<group>";
360358
};
361-
017EE12014E30C96000F3868 /* Frameworks */ = {
362-
isa = PBXGroup;
363-
children = (
364-
1296398C19C10B8500B2B653 /* Cocoa.framework */,
365-
1296396419C10AD200B2B653 /* Cocoa.framework */,
366-
012E8A5C1672BE860021F6FA /* CoreLocation.framework */,
367-
017EE12114E30C96000F3868 /* Foundation.framework */,
368-
CA795C4D18E32BAB00EBDFC4 /* libsqlite3.dylib */,
369-
1296396619C10AD200B2B653 /* Other Frameworks */,
370-
3EE5CAA11AF06A0700D6C48D /* SystemConfiguration.framework */,
371-
F4D3B61D1A0D98B4000825FE /* SystemConfiguration.framework */,
372-
017EE13114E30C96000F3868 /* UIKit.framework */,
373-
1296397519C10AD200B2B653 /* XCTest.framework */,
374-
);
375-
name = Frameworks;
376-
sourceTree = "<group>";
377-
};
378359
017EE12314E30C96000F3868 /* KeenClient */ = {
379360
isa = PBXGroup;
380361
children = (
@@ -435,14 +416,6 @@
435416
name = "Supporting Files";
436417
sourceTree = "<group>";
437418
};
438-
01A9A34314FE95210082AB22 /* docs */ = {
439-
isa = PBXGroup;
440-
children = (
441-
01A9A34414FE953D0082AB22 /* index.markdown */,
442-
);
443-
name = docs;
444-
sourceTree = "<group>";
445-
};
446419
01BA1AD414E77DC600CF9F84 /* Library */ = {
447420
isa = PBXGroup;
448421
children = (
@@ -454,16 +427,6 @@
454427
path = Library;
455428
sourceTree = "<group>";
456429
};
457-
1296396619C10AD200B2B653 /* Other Frameworks */ = {
458-
isa = PBXGroup;
459-
children = (
460-
1296396719C10AD200B2B653 /* Foundation.framework */,
461-
1296396819C10AD200B2B653 /* CoreData.framework */,
462-
1296396919C10AD200B2B653 /* AppKit.framework */,
463-
);
464-
name = "Other Frameworks";
465-
sourceTree = "<group>";
466-
};
467430
3EE9A72D1C59873F00B7B2D9 /* KeenClientFramework */ = {
468431
isa = PBXGroup;
469432
children = (
@@ -507,6 +470,7 @@
507470
48E9F0D11EC25A1D009A1BF8 /* Tests */ = {
508471
isa = PBXGroup;
509472
children = (
473+
48CAA1791ED609F8003C2008 /* DatasetResponseBody.json */,
510474
48E9F0C41EC255D1009A1BF8 /* FileStoreMigrationTests.h */,
511475
48E9F0C51EC255D1009A1BF8 /* FileStoreMigrationTests.m */,
512476
48E9F0C71EC2563F009A1BF8 /* GlobalPropertiesTests.h */,
@@ -529,6 +493,8 @@
529493
48E9F0CB1EC25719009A1BF8 /* SdkTrackingHeaderTests.m */,
530494
481496EA1EC3832C00A9DEED /* SavedQueryTests.h */,
531495
481496EB1EC3832C00A9DEED /* SavedQueryTests.m */,
496+
48CAA1761ED60792003C2008 /* DatasetTests.h */,
497+
48CAA1771ED60792003C2008 /* DatasetTests.m */,
532498
);
533499
name = Tests;
534500
sourceTree = "<group>";
@@ -748,6 +714,7 @@
748714
files = (
749715
017EE13C14E30C96000F3868 /* InfoPlist.strings in Resources */,
750716
482CB31D1E552F5300FCFACF /* corrupt.sqlite in Resources */,
717+
48CAA17A1ED609F8003C2008 /* DatasetResponseBody.json in Resources */,
751718
);
752719
runOnlyForDeploymentPostprocessing = 0;
753720
};
@@ -806,6 +773,7 @@
806773
files = (
807774
CA6410E218E39F3A00E53E3C /* KIODBStoreTests.m in Sources */,
808775
486B596E1EB29B0A00D5251D /* KeenTestCaseBase.m in Sources */,
776+
48CAA1781ED60792003C2008 /* DatasetTests.m in Sources */,
809777
48E9F0C61EC255D1009A1BF8 /* FileStoreMigrationTests.m in Sources */,
810778
3E63D9F71AE7425000E57A17 /* KIOQueryTests.m in Sources */,
811779
48E9F0CC1EC25719009A1BF8 /* SdkTrackingHeaderTests.m in Sources */,

KeenClient/KeenClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ typedef void (^AnalysisCompletionBlock)(NSData *responseData, NSURLResponse *res
369369
- (void)runAsyncSavedAnalysis:(NSString *)queryName completionHandler:(AnalysisCompletionBlock)completionHandler;
370370

371371
/**
372-
Gets results from a cached dataset query.
372+
Gets results from a cached dataset query, which can be a single or multi-analysis query.
373373
374374
See detailed documentation here: https://keen.io/docs/api/?shell#retrieving-results-from-a-cached-dataset
375375
and here: https://keen.io/docs/compute/cached-datasets/
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
{
2+
"result": [{
3+
"timeframe": {
4+
"start": "2017-05-15T00:00:00.000Z",
5+
"end": "2017-05-16T00:00:00.000Z"
6+
},
7+
"value": 0
8+
}, {
9+
"timeframe": {
10+
"start": "2017-05-16T00:00:00.000Z",
11+
"end": "2017-05-17T00:00:00.000Z"
12+
},
13+
"value": 0
14+
}, {
15+
"timeframe": {
16+
"start": "2017-05-17T00:00:00.000Z",
17+
"end": "2017-05-18T00:00:00.000Z"
18+
},
19+
"value": 0
20+
}, {
21+
"timeframe": {
22+
"start": "2017-05-18T00:00:00.000Z",
23+
"end": "2017-05-19T00:00:00.000Z"
24+
},
25+
"value": 20
26+
}, {
27+
"timeframe": {
28+
"start": "2017-05-19T00:00:00.000Z",
29+
"end": "2017-05-20T00:00:00.000Z"
30+
},
31+
"value": 0
32+
}, {
33+
"timeframe": {
34+
"start": "2017-05-20T00:00:00.000Z",
35+
"end": "2017-05-21T00:00:00.000Z"
36+
},
37+
"value": 0
38+
}, {
39+
"timeframe": {
40+
"start": "2017-05-21T00:00:00.000Z",
41+
"end": "2017-05-22T00:00:00.000Z"
42+
},
43+
"value": 0
44+
}, {
45+
"timeframe": {
46+
"start": "2017-05-22T00:00:00.000Z",
47+
"end": "2017-05-23T00:00:00.000Z"
48+
},
49+
"value": 0
50+
}, {
51+
"timeframe": {
52+
"start": "2017-05-23T00:00:00.000Z",
53+
"end": "2017-05-24T00:00:00.000Z"
54+
},
55+
"value": 0
56+
}, {
57+
"timeframe": {
58+
"start": "2017-05-24T00:00:00.000Z",
59+
"end": "2017-05-25T00:00:00.000Z"
60+
},
61+
"value": 0
62+
}],
63+
"metadata": {
64+
"dataset": {
65+
"dataset_name": "test_dataset",
66+
"display_name": "test_dataset",
67+
"query": {
68+
"project_id": "project_id",
69+
"analysis_type": "count",
70+
"event_collection": "test_dataset_collection",
71+
"filters": [],
72+
"timeframe": "this_100_days",
73+
"timezone": null,
74+
"interval": "daily",
75+
"group_by": []
76+
},
77+
"index_by": ["user_id"],
78+
"last_scheduled_date": "2017-05-24T17:56:07.510Z",
79+
"latest_subtimeframe_available": "2017-05-25T00:00:00.000Z",
80+
"milliseconds_behind": 0
81+
},
82+
"request": {
83+
"index_by": ["0"],
84+
"timeframe": "this_10_days"
85+
}
86+
}
87+
}

KeenClientTests/DatasetTests.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// DatasetTests.h
3+
// KeenClient
4+
//
5+
// Created by Brian Baumhover on 5/24/17.
6+
// Copyright © 2017 Keen Labs. All rights reserved.
7+
//
8+
9+
#import "KeenTestCaseBase.h"
10+
11+
@interface DatasetTests : KeenTestCaseBase
12+
13+
@end

KeenClientTests/DatasetTests.m

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
//
2+
// DatasetTests.m
3+
// KeenClient
4+
//
5+
// Created by Brian Baumhover on 5/24/17.
6+
// Copyright © 2017 Keen Labs. All rights reserved.
7+
//
8+
9+
#import "HTTPCodes.h"
10+
#import "KeenClient.h"
11+
12+
#import "KeenTestConstants.h"
13+
14+
#import "DatasetTests.h"
15+
16+
@implementation DatasetTests
17+
18+
- (void)testDatasetQuery {
19+
XCTestExpectation *queryCompleted =
20+
[self expectationWithDescription:@"runAsyncDatasetQuery should call completionHandler."];
21+
22+
NSString *datasetName = @"test_dataset";
23+
NSString *indexValue = @"0";
24+
NSString *timeframe = @"this_10_days";
25+
26+
// Load a canned response from a file
27+
NSString *jsonPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"DatasetResponseBody" ofType:@"json"];
28+
NSData *responseData = [[NSData alloc] initWithContentsOfFile:jsonPath];
29+
NSError *error;
30+
NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:nil error:&error];
31+
XCTAssertNil(error);
32+
// Save the result for later validation
33+
NSArray *expectedResult = [responseDictionary objectForKey:@"result"];
34+
35+
// Create a KeenClient instance with a canned HTTP response and a parameter
36+
// validator that will check that the request URL is as expected
37+
id mock = [self createClientWithResponseData:responseDictionary
38+
andStatusCode:HTTPCode200OK
39+
andNetworkConnected:@YES
40+
andRequestValidator:^BOOL(id requestObject) {
41+
XCTAssertTrue([requestObject isKindOfClass:[NSMutableURLRequest class]]);
42+
NSMutableURLRequest *request = requestObject;
43+
44+
NSString *expectedUrl =
45+
[NSString stringWithFormat:@"https://api.keen.io/3.0/projects/%@/"
46+
@"datasets/%@/results?index_by=%@&timeframe=%@",
47+
kDefaultProjectID,
48+
datasetName,
49+
indexValue,
50+
timeframe];
51+
XCTAssertEqualObjects(expectedUrl, request.URL.absoluteString);
52+
return @YES;
53+
}];
54+
55+
// Make the request and validate the results
56+
[mock runAsyncDatasetQuery:datasetName
57+
indexValue:indexValue
58+
timeframe:timeframe
59+
completionHandler:^(NSData *responseData, NSURLResponse *response, NSError *error) {
60+
XCTAssertNil(error);
61+
62+
// Validate the http code
63+
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
64+
XCTAssertEqual([httpResponse statusCode], HTTPCode200OK);
65+
66+
// Deserialize the response dictionary
67+
NSDictionary *responseDictionary =
68+
[NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
69+
70+
// Get the result from the response dictionary
71+
NSArray *result = [responseDictionary objectForKey:@"result"];
72+
73+
// Assert that the result is as expected
74+
XCTAssertEqualObjects(result, expectedResult);
75+
[queryCompleted fulfill];
76+
}];
77+
78+
[self waitForExpectationsWithTimeout:kTestExpectationTimeoutInterval handler:nil];
79+
}
80+
81+
@end

0 commit comments

Comments
 (0)