Commit c606fc11 authored by 井庆林's avatar 井庆林

..

parent 0323d362
...@@ -58,19 +58,26 @@ NSString *const MockCityId = @"beijing"; ...@@ -58,19 +58,26 @@ NSString *const MockCityId = @"beijing";
[dict setObject:@"" forKey:@"extra_param"]; [dict setObject:@"" forKey:@"extra_param"];
[dict setObject:@"" forKey:@"referrer_tab_name"]; [dict setObject:@"" forKey:@"referrer_tab_name"];
[dict setObject:@(0) forKey:@"is_push"]; [dict setObject:@(0) forKey:@"is_push"];
[Phobos track:@"page_view" attributes:dict]; // [Phobos track:@"page_view" attributes:dict];
NSArray *array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey]; // NSArray *array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
//
[Phobos track:@"page_view" attributes:dict]; // [Phobos track:@"page_view" attributes:dict];
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey]; // array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
[dict setObject:[PhobosUtil currentTime] forKey:@"in"]; [dict setObject:[PhobosUtil currentTime] forKey:@"in"];
[dict setObject:[PhobosUtil currentTime] forKey:@"out"]; [dict setObject:[PhobosUtil currentTime] forKey:@"out"];
[Phobos track:@"page_view" attributes:dict sendNow:YES]; [Phobos track:@"page_view" attributes:dict sendNow:YES];
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey]; // array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
[Phobos track:@"test" attributes:dict]; [Phobos track:@"test" attributes:dict sendNow:YES];
array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey]; [Phobos track:@"test2" attributes:dict sendNow:YES];
[Phobos track:@"test3" attributes:dict sendNow:YES];
[Phobos track:@"test4" attributes:dict sendNow:YES];
[Phobos track:@"test3" attributes:dict sendNow:YES];
[Phobos track:@"test4" attributes:dict sendNow:YES];
[Phobos track:@"test3" attributes:dict sendNow:YES];
[Phobos track:@"test4" attributes:dict sendNow:YES];
// array = [GMCache fetchObjectAtDocumentPathWithkey:PhobosCacheKey];
} }
......
...@@ -8,6 +8,7 @@ inhibit_all_warnings! ...@@ -8,6 +8,7 @@ inhibit_all_warnings!
target 'GMPhobos_Example' do target 'GMPhobos_Example' do
pod 'GMPhobos', :path => '../' pod 'GMPhobos', :path => '../'
# pod 'GMPhobos', :git => 'git@git.wanmeizhensuo.com:gengmeiios/GMPhobos.git', :branch => 'jql/coreData'
target 'GMPhobos_Tests' do target 'GMPhobos_Tests' do
inherit! :search_paths inherit! :search_paths
end end
......
...@@ -33,6 +33,6 @@ SPEC CHECKSUMS: ...@@ -33,6 +33,6 @@ SPEC CHECKSUMS:
MJExtension: 635f2c663dcb1bf76fa4b715b2570a5710aec545 MJExtension: 635f2c663dcb1bf76fa4b715b2570a5710aec545
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
PODFILE CHECKSUM: 4db0de045b595396507d6bad04e4823b02c3061d PODFILE CHECKSUM: abbb682362e2d6dbd228843955b17f6796b958b0
COCOAPODS: 1.8.4 COCOAPODS: 1.8.4
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#import <GMPhobos/Phobos.h> #import <GMPhobos/Phobos.h>
#import "GMPhobosController.h" #import "GMPhobosController.h"
#import <GMCache/GMCache.h> #import <GMCache/GMCache.h>
#import <MJExtension/MJExtension.h>
NSString *const MockAppName = @"gengmei_test"; NSString *const MockAppName = @"gengmei_test";
NSString *const MockChannelId = @"AppStore"; NSString *const MockChannelId = @"AppStore";
...@@ -25,7 +26,7 @@ NSString *const MockCityId = @"beijing"; ...@@ -25,7 +26,7 @@ NSString *const MockCityId = @"beijing";
- (void)setUp { - (void)setUp {
[super setUp]; [super setUp];
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:PhobosGray]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:PhobosGray];
[Phobos clientWithAppName:MockAppName channelId:MockChannelId]; [Phobos clientWithAppName:MockAppName channelId:MockChannelId];
Phobos.sharedClient.serverAPI = @"http://log.test.igengmei.com/log/collect"; Phobos.sharedClient.serverAPI = @"http://log.test.igengmei.com/log/collect";
Phobos.sharedClient.logEnabled = NO; // 调试打Log模式,看情况开启 Phobos.sharedClient.logEnabled = NO; // 调试打Log模式,看情况开启
...@@ -39,8 +40,7 @@ NSString *const MockCityId = @"beijing"; ...@@ -39,8 +40,7 @@ NSString *const MockCityId = @"beijing";
- (void)tearDown { - (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class. // Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown]; [super tearDown];
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
[Phobos removeAllImmediatelyPhobosData];
} }
/** /**
...@@ -50,14 +50,14 @@ NSString *const MockCityId = @"beijing"; ...@@ -50,14 +50,14 @@ NSString *const MockCityId = @"beijing";
*/ */
- (void)testClientWithUserId{ - (void)testClientWithUserId{
[self setUp]; [self setUp];
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
[Phobos.sharedClient setUserId:MockUserId]; [Phobos.sharedClient setUserId:MockUserId];
[Phobos.sharedClient setCurrentCityId:MockCityId]; [Phobos.sharedClient setCurrentCityId:MockCityId];
[Phobos track:MockEventId]; [Phobos track:MockEventId];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
NSArray *array = [Phobos normalPhobosDataForServerAPI]; NSArray<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData];
XCTAssertTrue(array.count == 1, @"array is empty"); XCTAssertTrue(array.count == 1, @"array is empty");
NSDictionary *dict = [array objectAtIndex:0]; NSDictionary *dict = [array.firstObject.data mj_JSONObject];
[self verfiyDict:dict]; [self verfiyDict:dict];
XCTAssertTrue([[dict objectForKey:@"user_id"] isEqualToString:MockUserId] , @"Invalid user_id value"); XCTAssertTrue([[dict objectForKey:@"user_id"] isEqualToString:MockUserId] , @"Invalid user_id value");
} }
...@@ -70,9 +70,9 @@ NSString *const MockCityId = @"beijing"; ...@@ -70,9 +70,9 @@ NSString *const MockCityId = @"beijing";
- (void)testTrackEventWithoutAttr{ - (void)testTrackEventWithoutAttr{
[Phobos track:MockEventId]; [Phobos track:MockEventId];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
NSArray *array = [Phobos normalPhobosDataForServerAPI]; NSArray<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData];
XCTAssertTrue(array.count == 1, @"array is empty"); XCTAssertTrue(array.count == 1, @"array is empty");
NSDictionary *dict = [array objectAtIndex:0]; NSDictionary *dict = [array.firstObject.data mj_JSONObject];
[self verfiyDict:dict]; [self verfiyDict:dict];
} }
...@@ -86,9 +86,9 @@ NSString *const MockCityId = @"beijing"; ...@@ -86,9 +86,9 @@ NSString *const MockCityId = @"beijing";
NSDictionary *attr = @{@"attr":@"track_attr"}; NSDictionary *attr = @{@"attr":@"track_attr"};
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
NSArray *array = [Phobos normalPhobosDataForServerAPI]; NSArray<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData];
XCTAssertTrue(array.count == 1, @"array is empty"); XCTAssertTrue(array.count == 1, @"array is empty");
NSDictionary *dict = [array objectAtIndex:0]; NSDictionary *dict = [array.firstObject.data mj_JSONObject];
[self verfiyDict:dict]; [self verfiyDict:dict];
//验证Param的值是否正确 //验证Param的值是否正确
...@@ -102,13 +102,13 @@ NSString *const MockCityId = @"beijing"; ...@@ -102,13 +102,13 @@ NSString *const MockCityId = @"beijing";
* @since <#version number#> * @since <#version number#>
*/ */
- (void)testTrackEventWithAttrAndSendNow{ - (void)testTrackEventWithAttrAndSendNow{
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
// Given // Given
NSDictionary *attr = @{@"attr":@"track_attr"}; NSDictionary *attr = @{@"attr":@"track_attr"};
// When // When
[Phobos track:MockEventId attributes:attr sendNow:YES]; [Phobos track:MockEventId attributes:attr sendNow:YES];
// Then // Then
XCTAssertTrue([Phobos normalPhobosCount] == 0, @"array should be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array should be empty");
} }
/** /**
...@@ -125,7 +125,7 @@ NSString *const MockCityId = @"beijing"; ...@@ -125,7 +125,7 @@ NSString *const MockCityId = @"beijing";
// When // When
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:YES];
XCTAssertTrue([Phobos normalPhobosCount] != 0, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array should be empty");
} }
/** /**
...@@ -139,16 +139,13 @@ NSString *const MockCityId = @"beijing"; ...@@ -139,16 +139,13 @@ NSString *const MockCityId = @"beijing";
// 因为实时埋点是异步删除,所以这个位置暂时延时取数据,待优化 TODO // 因为实时埋点是异步删除,所以这个位置暂时延时取数据,待优化 TODO
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSArray *array = [Phobos immediatelyPhobosForServerAPI]; XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
XCTAssertTrue(array.count == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr sendNow:YES]; [Phobos track:MockEventId attributes:attr sendNow:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSArray *array = [Phobos immediatelyPhobosForServerAPI]; XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
XCTAssertTrue(array.count == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr sendNow:YES]; [Phobos track:MockEventId attributes:attr sendNow:YES];
array = [Phobos normalPhobosDataForServerAPI]; XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
XCTAssertTrue([Phobos normalPhobosCount] == 0, @"array shouldn't be empty");
}); });
}); });
} }
...@@ -159,14 +156,14 @@ NSString *const MockCityId = @"beijing"; ...@@ -159,14 +156,14 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4 * @since 1.1.4
*/ */
- (void)testTrackEventWithDoubleAttrAndNoSendNow { - (void)testTrackEventWithDoubleAttrAndNoSendNow {
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
NSDictionary *attr = @{@"attr":@"track_attr"}; NSDictionary *attr = @{@"attr":@"track_attr"};
// //
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 1, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
// PhobosCacheKey超过50条数据会自动上报,模拟此情况 // PhobosCacheKey超过50条数据会自动上报,模拟此情况
for (int i = 0; i < 50; i++) { for (int i = 0; i < 50; i++) {
...@@ -174,12 +171,12 @@ NSString *const MockCityId = @"beijing"; ...@@ -174,12 +171,12 @@ NSString *const MockCityId = @"beijing";
} }
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 1, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 2, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 2, @"array shouldn't be empty");
} }
/** /**
...@@ -188,7 +185,7 @@ NSString *const MockCityId = @"beijing"; ...@@ -188,7 +185,7 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4 * @since 1.1.4
*/ */
- (void)testTrackEventWithSendNowAndNoSendNowOne { - (void)testTrackEventWithSendNowAndNoSendNowOne {
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
NSDictionary *attr = @{@"attr":@"track_attr"}; NSDictionary *attr = @{@"attr":@"track_attr"};
NSDictionary *sendNowAttr = @{@"attr":@"track_attr_send_now"}; NSDictionary *sendNowAttr = @{@"attr":@"track_attr_send_now"};
...@@ -196,28 +193,28 @@ NSString *const MockCityId = @"beijing"; ...@@ -196,28 +193,28 @@ NSString *const MockCityId = @"beijing";
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
} }
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 30, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 30, @"array shouldn't be empty");
// PhobosCacheKey超过50条数据会自动上报,模拟此情况 // PhobosCacheKey超过50条数据会自动上报,模拟此情况
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:YES];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 30, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:NO];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 30, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:YES];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 30, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 31, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
} }
/** /**
...@@ -226,34 +223,34 @@ NSString *const MockCityId = @"beijing"; ...@@ -226,34 +223,34 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4 * @since 1.1.4
*/ */
- (void)testTrackEventWithSendNowAndNoSendNowTwo { - (void)testTrackEventWithSendNowAndNoSendNowTwo {
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
NSDictionary *attr = @{@"attr":@"track_attr"}; NSDictionary *attr = @{@"attr":@"track_attr"};
NSDictionary *sendNowAttr = @{@"attr":@"track_attr_send_now"}; NSDictionary *sendNowAttr = @{@"attr":@"track_attr_send_now"};
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:YES];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 0, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 1, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:YES];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 2, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:sendNowAttr sendNow:YES]; [Phobos track:MockEventId attributes:sendNowAttr sendNow:YES];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 2, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 0, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 3, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
} }
/** /**
...@@ -262,24 +259,24 @@ NSString *const MockCityId = @"beijing"; ...@@ -262,24 +259,24 @@ NSString *const MockCityId = @"beijing";
* @since 1.1.4 * @since 1.1.4
*/ */
- (void)testTrackEventWithSendNowAndNoSendNowThree { - (void)testTrackEventWithSendNowAndNoSendNowThree {
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
NSDictionary *attr = @{@"attr":@"track_attr"}; NSDictionary *attr = @{@"attr":@"track_attr"};
// //
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 1, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
// PhobosCacheKey超过50条数据会自动上报,模拟此情况 // PhobosCacheKey超过50条数据会自动上报,模拟此情况
for (int i = 0; i < 50; i++) { for (int i = 0; i < 50; i++) {
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
} }
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 1, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 1, @"array shouldn't be empty");
[Phobos track:MockEventId attributes:attr]; [Phobos track:MockEventId attributes:attr];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 2, @"array shouldn't be empty"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 2, @"array shouldn't be empty");
} }
- (void)verfiyDict:(NSDictionary *)dict{ - (void)verfiyDict:(NSDictionary *)dict{
...@@ -323,20 +320,20 @@ NSString *const MockCityId = @"beijing"; ...@@ -323,20 +320,20 @@ NSString *const MockCityId = @"beijing";
[controller viewWillDisappear:true]; [controller viewWillDisappear:true];
[self paramUnNilCheck]; [self paramUnNilCheck];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
NSArray *array = [Phobos normalPhobosDataForServerAPI]; NSArray<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData];
XCTAssertTrue(array.count != 0, @"PhobosCacheKey 下面应该有数据"); XCTAssertTrue(array.count != 0, @"PhobosCacheKey 下面应该有数据");
NSDictionary *dic = array[0][@"params"]; NSDictionary *dic = [array.firstObject mj_JSONObject][@"params"];
XCTAssertTrue([dic[@"referrer_id"] isEqualToString:@"rreferrerIdTest"], @"referrerId至少使用默认的空字符串"); XCTAssertTrue([dic[@"referrer_id"] isEqualToString:@"rreferrerIdTest"], @"referrerId至少使用默认的空字符串");
} }
- (void)paramUnNilCheck { - (void)paramUnNilCheck {
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
NSArray *array = [Phobos normalPhobosDataForServerAPI]; NSArray<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData];
XCTAssertTrue(array.count != 0, @"PhobosCacheKey 下面应该有数据"); XCTAssertTrue(array.count != 0, @"PhobosCacheKey 下面应该有数据");
NSDictionary *dic = array[0][@"params"]; NSDictionary *dic = [array.firstObject mj_JSONObject][@"params"];
XCTAssertTrue(dic[@"page_name"] != nil, @"page_name至少使用默认的空字符串"); XCTAssertTrue(dic[@"page_name"] != nil, @"page_name至少使用默认的空字符串");
XCTAssertTrue([dic[@"referer"] integerValue] >= 0, @"referer至少使用默认的空字符串"); XCTAssertTrue([dic[@"referer"] integerValue] >= 0, @"referer至少使用默认的空字符串");
XCTAssertTrue(dic[@"business_id"] != nil, @"business_id至少使用默认的空字符串"); XCTAssertTrue(dic[@"business_id"] != nil, @"business_id至少使用默认的空字符串");
...@@ -352,8 +349,9 @@ NSString *const MockCityId = @"beijing"; ...@@ -352,8 +349,9 @@ NSString *const MockCityId = @"beijing";
} }
// 该单元测试暂时不用,因为过滤代码暂时不用,所以不需要跑通 // 该单元测试暂时不用,因为过滤代码暂时不用,所以不需要跑通
/*
- (void)testCheckPVPhobos { - (void)testCheckPVPhobos {
[Phobos removeAllNormalPhobosData]; [Phobos removeAllPhobosData];
NSString *inDate = [PhobosUtil currentTime]; NSString *inDate = [PhobosUtil currentTime];
[NSThread sleepForTimeInterval:1];//模拟浏览页面,让out和in时间相差1s [NSThread sleepForTimeInterval:1];//模拟浏览页面,让out和in时间相差1s
...@@ -369,12 +367,12 @@ NSString *const MockCityId = @"beijing"; ...@@ -369,12 +367,12 @@ NSString *const MockCityId = @"beijing";
[dict setObject:@"" forKey:@"referrer_tab_name"]; [dict setObject:@"" forKey:@"referrer_tab_name"];
[dict setObject:@(0) forKey:@"is_push"]; [dict setObject:@(0) forKey:@"is_push"];
[Phobos track:@"page_view" attributes:dict]; [Phobos track:@"page_view" attributes:dict];
NSArray *array = [Phobos normalPhobosDataForServerAPI]; NSArray<SendDataEntity *> *array = [Phobos fetchToBeSendPhobosData];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue(array.count == 1, @"PhobosCacheKey 下面应该有数据"); XCTAssertTrue(array.count == 1, @"PhobosCacheKey 下面应该有数据");
[Phobos track:@"page_view" attributes:dict]; [Phobos track:@"page_view" attributes:dict];
XCTAssertTrue([Phobos normalPhobosCount] == 1, @"PhobosCacheKey 上条数据不应该发送"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 2, @"PhobosCacheKey 上条数据不应该发送");
[NSThread sleepForTimeInterval:2];//模拟浏览页面,让第二次浏览和上一次时间相差2s [NSThread sleepForTimeInterval:2];//模拟浏览页面,让第二次浏览和上一次时间相差2s
...@@ -383,14 +381,15 @@ NSString *const MockCityId = @"beijing"; ...@@ -383,14 +381,15 @@ NSString *const MockCityId = @"beijing";
[dict setObject:[PhobosUtil currentTime] forKey:@"out"]; [dict setObject:[PhobosUtil currentTime] forKey:@"out"];
[Phobos track:@"page_view" attributes:dict]; [Phobos track:@"page_view" attributes:dict];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount]== 2, @"PhobosCacheKey 上条数据应该发送"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount]== 2, @"PhobosCacheKey 上条数据应该发送");
[Phobos track:@"page_view" attributes:dict]; [Phobos track:@"page_view" attributes:dict];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 2, @"PhobosCacheKey 上条数据不应该发送"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 2, @"PhobosCacheKey 上条数据不应该发送");
[Phobos track:@"test" attributes:dict]; [Phobos track:@"test" attributes:dict];
[NSThread sleepForTimeInterval:0.2]; [NSThread sleepForTimeInterval:0.2];
XCTAssertTrue([Phobos normalPhobosCount] == 3, @"PhobosCacheKey 上条数据应该发送"); XCTAssertTrue([Phobos fetchToBeSendPhobosDataCount] == 3, @"PhobosCacheKey 上条数据应该发送");
} }
*/
#pragma mark - 其它方法test #pragma mark - 其它方法test
......
...@@ -166,23 +166,13 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -166,23 +166,13 @@ NS_ASSUME_NONNULL_BEGIN
@interface NewPhobos (UtilTest) @interface NewPhobos (UtilTest)
/** 获取所有非立即发送埋点数量 */ /** 获取所有非立即发送埋点数量 */
+ (NSInteger)normalPhobosCount; + (NSInteger)fetchToBeSendPhobosDataCount;
/** 获取所有非立即发送埋点数据 */ /** 获取发送埋点数据 */
+ (NSArray *)normalPhobosData; + (NSArray *)fetchToBeSendPhobosData;
/** 获取所有立即发送埋点数量 */ /** 清除待发送埋点数据缓存 */
+ (NSUInteger)immediatelyPhobosCount; + (void)removeAllPhobosData;
/** 获取所有立即发送埋点数据 */
+ (NSArray *)immediatelyPhobosData;
/** 清除非立即发送埋点数据缓存 */
+ (void)removeAllNormalPhobosData;
/** 清除立即发送埋点数据缓存 */
+ (void)removeAllImmediatelyPhobosData;
@end @end
......
...@@ -386,15 +386,8 @@ static NSString *sdkVersion = @"1.4.0"; ...@@ -386,15 +386,8 @@ static NSString *sdkVersion = @"1.4.0";
NSDictionary *dataDict = [_sharedClient prepareDictionaryForEvent:eventName attributes:attributes]; NSDictionary *dataDict = [_sharedClient prepareDictionaryForEvent:eventName attributes:attributes];
@try { @try {
NSData *JSON = [PhobosUtil encodeJSON:dataDict]; NSData *JSON = [PhobosUtil encodeJSON:dataDict];
[PhobosDataManager insertData:dataDict sendAPI:currentAPI immediately:sendNow completion:^(BOOL contextDidSave, NSError * _Nullable error) { [PhobosDataManager insertData:dataDict sendAPI:currentAPI completion:^(BOOL contextDidSave, NSError * _Nullable error) {
if (sendNow) { [self disposeSendDataWithImmediately:sendNow];
[self disposeSendDataWithImmediately:YES];
} else {
NSArray<SendDataEntity *> *fetchArray = [PhobosDataManager fetchDataEntitiesWithImmediately:NO];
if (fetchArray.count > 50) {
[self disposeSendDataWithImmediately:NO];
}
}
}]; }];
} @catch (NSException *exception) { } @catch (NSException *exception) {
NSAssert(NO, @"哎呀呀,VALUE不能为NSObject "); NSAssert(NO, @"哎呀呀,VALUE不能为NSObject ");
...@@ -405,8 +398,8 @@ static NSString *sdkVersion = @"1.4.0"; ...@@ -405,8 +398,8 @@ static NSString *sdkVersion = @"1.4.0";
* 处理发送数据 * 处理发送数据
*/ */
+ (void)disposeSendDataWithImmediately:(BOOL)immediately { + (void)disposeSendDataWithImmediately:(BOOL)immediately {
NSArray<SendDataEntity *> *entities = [PhobosDataManager fetchDataEntitiesWithImmediately:immediately]; NSArray<SendDataEntity *> *entities = [PhobosDataManager fetchToBeSendDataEntities];
if (entities.count > 0) { if (immediately || entities.count > 50) {
[PhobosDataManager updateDataEntities:entities sendStatus:PhobosDataSendStatusSending completion:nil]; [PhobosDataManager updateDataEntities:entities sendStatus:PhobosDataSendStatusSending completion:nil];
[PhobosSendManager sendDataWithEntities:entities completion:^(NSArray<SendDataEntity *> * _Nonnull finishEntities, NSInteger code) { [PhobosSendManager sendDataWithEntities:entities completion:^(NSArray<SendDataEntity *> * _Nonnull finishEntities, NSInteger code) {
if (code == 200) { if (code == 200) {
...@@ -425,37 +418,17 @@ static NSString *sdkVersion = @"1.4.0"; ...@@ -425,37 +418,17 @@ static NSString *sdkVersion = @"1.4.0";
@implementation NewPhobos (UtilTest) @implementation NewPhobos (UtilTest)
/** 获取所有非立即发送埋点数量 */ /** 获取所有非立即发送埋点数量 */
+ (NSInteger)normalPhobosCount { + (NSInteger)fetchToBeSendPhobosDataCount {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status = %d", PhobosDataSendStatusNormal]; return [PhobosDataManager fetchCountOfToBeSendEntities];
return [PhobosDataManager fetchCountOfEntitiesWithPredicate:predicate];
}
/** 获取所有非立即发送埋点数据 */
+ (NSArray *)normalPhobosData {
return [PhobosDataManager fetchDataEntitiesWithImmediately:NO];
} }
/** 获取所有立即发送埋点数量 */ /** 获取待发送埋点数据 */
+ (NSUInteger)immediatelyPhobosCount { + (NSArray *)fetchToBeSendPhobosData {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status = %d or status = %d", PhobosDataSendStatusToBeSend, PhobosDataSendStatusError]; return [PhobosDataManager fetchToBeSendDataEntities];
return [PhobosDataManager fetchCountOfEntitiesWithPredicate:predicate];
}
/** 获取所有立即发送埋点数据 */
+ (NSArray *)immediatelyPhobosData {
return [PhobosDataManager fetchDataEntitiesWithImmediately:YES];
}
/** 清除非立即发送埋点数据缓存 */
+ (void)removeAllNormalPhobosData {
NSArray<SendDataEntity *> *fetchArray = [PhobosDataManager fetchDataEntitiesWithImmediately:NO];
[PhobosDataManager deleteDataEntities:fetchArray];
} }
/** 清除立即发送埋点数据缓存 */ /** 清除待发送埋点数据缓存 */
+ (void)removeAllImmediatelyPhobosData { + (void)removeAllPhobosData {
NSArray<SendDataEntity *> *fetchArray = [PhobosDataManager fetchDataEntitiesWithImmediately:YES]; [PhobosDataManager deleteAllEntities];
[PhobosDataManager deleteDataEntities:fetchArray];
} }
@end @end
...@@ -160,25 +160,14 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -160,25 +160,14 @@ NS_ASSUME_NONNULL_BEGIN
@interface Phobos (UtilTest) @interface Phobos (UtilTest)
/** 获取所有非立即发送埋点数量 */ /** 获取发送埋点数量 */
+ (NSInteger)normalPhobosCount; + (NSInteger)fetchToBeSendPhobosDataCount;
/** 获取所有非立即发送埋点数据 */ /** 获取待发送埋点数据 */
+ (NSArray *)normalPhobosData; + (NSArray *)fetchToBeSendPhobosData;
/** 获取所有立即发送埋点数量 */
+ (NSUInteger)immediatelyPhobosCount;
/** 获取所有立即发送埋点数据 */
+ (NSArray *)immediatelyPhobosData;
/** 清除非立即发送埋点数据缓存 */
+ (void)removeAllNormalPhobosData;
/** 清除立即发送埋点数据缓存 */
+ (void)removeAllImmediatelyPhobosData;
/** 清除待发送埋点数据缓存 */
+ (void)removeAllPhobosData;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
...@@ -212,47 +212,20 @@ static BOOL isGray = NO; ...@@ -212,47 +212,20 @@ static BOOL isGray = NO;
@implementation NewPhobos (UtilTest) @implementation NewPhobos (UtilTest)
/** 获取所有非立即发送埋点数量 */ /** 获取发送埋点数量 */
+ (NSInteger)normalPhobosCount { + (NSUInteger)fetchToBeSendPhobosDataCount {
return isGray ? [NewPhobos normalPhobosCount] : 0; return isGray ? [NewPhobos fetchToBeSendPhobosDataCount] : 0;
} }
/** 获取所有非立即发送埋点数据 */ /** 获取发送埋点数据 */
+ (NSArray *)normalPhobosData { + (NSArray *)fetchToBeSendPhobosData {
return isGray ? [NewPhobos normalPhobosData] : nil; return isGray ? [NewPhobos fetchToBeSendPhobosData] : @[];
} }
/** 获取所有立即发送埋点数量 */ /** 清除待发送埋点数据缓存 */
+ (NSUInteger)immediatelyPhobosCount { + (void)removeAllPhobosData {
return isGray ? [NewPhobos immediatelyPhobosCount] : 0;
}
/** 获取所有立即发送埋点数据 */
+ (NSDictionary *)immediatelyPhobosData {
return isGray ? [NewPhobos immediatelyPhobosData] : nil;
}
/** 获取url的立即发送埋点数据 */
+ (NSArray *)immediatelyPhobosDataForURL:(NSString *)url {
return isGray ? [NewPhobos immediatelyPhobosDataForURL:url] : nil;
}
+ (NSUInteger)immediatelyPhobosCountForURL:(NSString *)url {
return isGray ? [NewPhobos immediatelyPhobosCountForURL:url] : 0;
}
/** 清除非立即发送埋点数据缓存 */
+ (void)removeAllNormalPhobosData {
if (isGray) {
[NewPhobos removeAllNormalPhobosData];
}
}
/** 清除立即发送埋点数据缓存 */
+ (void)removeAllImmediatelyPhobosData {
if (isGray) { if (isGray) {
[NewPhobos removeAllNormalPhobosData]; [NewPhobos removeAllPhobosData];
} }
} }
......
...@@ -21,12 +21,18 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) { ...@@ -21,12 +21,18 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) {
@interface PhobosDataManager : NSObject @interface PhobosDataManager : NSObject
+ (NSArray<SendDataEntity *> *)fetchDataEntitiesWithImmediately:(BOOL)immediately; /** 获取待发送数据,包含待发送数据和发送失败数据 */
+ (NSArray<SendDataEntity *> *)fetchToBeSendDataEntities;
+ (NSArray<SendDataEntity *> *)fetchDataEntitiesWithPredicate:(NSPredicate *)searchFilter; + (NSArray<SendDataEntity *> *)fetchDataEntitiesWithPredicate:(NSPredicate *)searchFilter;
+ (NSUInteger)fetchCountOfToBeSendEntities;
+ (NSUInteger)fetchCountOfEntitiesWithPredicate:(NSPredicate *)searchFilter; + (NSUInteger)fetchCountOfEntitiesWithPredicate:(NSPredicate *)searchFilter;
+ (void)insertData:(NSDictionary *)data sendAPI:(NSString *)sendAPI immediately:(BOOL)immediately completion:(MRSaveCompletionHandler)completion;
+ (void)insertData:(NSDictionary *)data sendAPI:(NSString *)sendAPI completion:(MRSaveCompletionHandler)completion;
+ (void)updateDataEntities:(NSArray<SendDataEntity *> *)entities sendStatus:(PhobosDataSendStatus)sendStatus completion:(MRSaveCompletionHandler)completion; + (void)updateDataEntities:(NSArray<SendDataEntity *> *)entities sendStatus:(PhobosDataSendStatus)sendStatus completion:(MRSaveCompletionHandler)completion;
+ (void)deleteDataEntities:(NSArray<SendDataEntity *> *)entities; + (void)deleteDataEntities:(NSArray<SendDataEntity *> *)entities;
+ (void)deleteAllEntities;
@end @end
......
...@@ -25,16 +25,14 @@ static NSManagedObjectContext *Phobos_defaultContext; ...@@ -25,16 +25,14 @@ static NSManagedObjectContext *Phobos_defaultContext;
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
[NSManagedObjectModel MR_setDefaultManagedObjectModel:model]; [NSManagedObjectModel MR_setDefaultManagedObjectModel:model];
[MagicalRecord setupAutoMigratingCoreDataStack]; [MagicalRecord setupAutoMigratingCoreDataStack];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status = %d", PhobosDataSendStatusSending];
NSArray<SendDataEntity *> *entities = [self fetchDataEntitiesWithPredicate:predicate];
[self updateDataEntities:entities sendStatus:PhobosDataSendStatusError completion:nil];
}); });
} }
+ (NSArray<SendDataEntity *> *)fetchDataEntitiesWithImmediately:(BOOL)immediately { + (NSArray<SendDataEntity *> *)fetchToBeSendDataEntities {
NSPredicate *predicate; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status = %d or status = %d", PhobosDataSendStatusToBeSend, PhobosDataSendStatusError];
if (immediately) {
predicate = [NSPredicate predicateWithFormat:@"status = %d or status = %d", PhobosDataSendStatusToBeSend, PhobosDataSendStatusError];
} else {
predicate = [NSPredicate predicateWithFormat:@"status = %d", PhobosDataSendStatusNormal];
}
return [self fetchDataEntitiesWithPredicate:predicate]; return [self fetchDataEntitiesWithPredicate:predicate];
} }
...@@ -42,18 +40,23 @@ static NSManagedObjectContext *Phobos_defaultContext; ...@@ -42,18 +40,23 @@ static NSManagedObjectContext *Phobos_defaultContext;
return [SendDataEntity MR_findAllWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_defaultContext]]; return [SendDataEntity MR_findAllWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_defaultContext]];
} }
+ (NSUInteger)fetchCountOfToBeSendEntities {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status = %d or status = %d", PhobosDataSendStatusToBeSend, PhobosDataSendStatusError];
return [self fetchCountOfEntitiesWithPredicate:predicate];
}
+ (NSUInteger)fetchCountOfEntitiesWithPredicate:(NSPredicate *)searchFilter { + (NSUInteger)fetchCountOfEntitiesWithPredicate:(NSPredicate *)searchFilter {
return [SendDataEntity MR_numberOfEntitiesWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_defaultContext]]; return [SendDataEntity MR_numberOfEntitiesWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_defaultContext]];
} }
+ (void)insertData:(NSDictionary *)data sendAPI:(NSString *)sendAPI immediately:(BOOL)immediately completion:(MRSaveCompletionHandler)completion { + (void)insertData:(NSDictionary *)data sendAPI:(NSString *)sendAPI completion:(MRSaveCompletionHandler)completion {
if (!sendAPI || [sendAPI isEqualToString:@""] || !data) { if (!sendAPI || [sendAPI isEqualToString:@""] || !data) {
return; return;
} }
SendDataEntity *entity = [SendDataEntity MR_createEntity]; SendDataEntity *entity = [SendDataEntity MR_createEntity];
entity.data = [data mj_JSONData]; entity.data = [data mj_JSONData];
entity.api = sendAPI; entity.api = sendAPI;
entity.status = immediately ? PhobosDataSendStatusToBeSend : PhobosDataSendStatusNormal; entity.status = PhobosDataSendStatusToBeSend;
entity.id = [PhobosUtil currentMMTime]; entity.id = [PhobosUtil currentMMTime];
[[NSManagedObjectContext MR_defaultContext] MR_saveWithOptions:MRSaveSynchronously completion:completion]; [[NSManagedObjectContext MR_defaultContext] MR_saveWithOptions:MRSaveSynchronously completion:completion];
} }
...@@ -76,4 +79,9 @@ static NSManagedObjectContext *Phobos_defaultContext; ...@@ -76,4 +79,9 @@ static NSManagedObjectContext *Phobos_defaultContext;
} }
} }
+ (void)deleteAllEntities {
[SendDataEntity MR_truncateAll];
[[NSManagedObjectContext MR_defaultContext] MR_saveOnlySelfAndWait];
}
@end @end
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
}); });
} }
// TODO: 全量以后,一定时间需要清除下面逻辑
+ (void)disposeOldData { + (void)disposeOldData {
NSMutableArray *total = [NSMutableArray new]; NSMutableArray *total = [NSMutableArray new];
NSArray *normalDataArray = [GMCache fetchObjectAtDocumentPathWithkey:PhobosTempCacheKey]; NSArray *normalDataArray = [GMCache fetchObjectAtDocumentPathWithkey:PhobosTempCacheKey];
...@@ -63,10 +64,12 @@ ...@@ -63,10 +64,12 @@
}]; }];
[sendDataMap enumerateKeysAndObjectsUsingBlock:^(NSString *api, NSArray<SendDataEntity *> *entities, BOOL * _Nonnull stop) { [sendDataMap enumerateKeysAndObjectsUsingBlock:^(NSString *api, NSArray<SendDataEntity *> *entities, BOOL * _Nonnull stop) {
// TODO: 如果数据量过大,
NSMutableArray *sendDatas = [NSMutableArray new]; NSMutableArray *sendDatas = [NSMutableArray new];
[entities enumerateObjectsUsingBlock:^(SendDataEntity *obj, NSUInteger idx, BOOL * _Nonnull stop) { [entities enumerateObjectsUsingBlock:^(SendDataEntity *obj, NSUInteger idx, BOOL * _Nonnull stop) {
[sendDatas addObject:[obj.data mj_JSONObject]]; [sendDatas addObject:[obj.data mj_JSONObject]];
}]; }];
if (sendDatas.count > 0) { if (sendDatas.count > 0) {
[self sendDataArray:sendDatas currentAPI:api success:^(NSInteger code) { [self sendDataArray:sendDatas currentAPI:api success:^(NSInteger code) {
if (completion) { if (completion) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment