Skip to content

Commit

Permalink
release 7.0.0-rc1
Browse files Browse the repository at this point in the history
  • Loading branch information
vitaliy-pavlenko committed Jul 18, 2024
1 parent 60961dd commit fc9ad0b
Show file tree
Hide file tree
Showing 10 changed files with 198 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ NS_ASSUME_NONNULL_BEGIN
@property(copy, readonly) NSString *publisherId;
@property(copy, readonly) NSString *adUnitId;
@property(copy, readonly) NSString *storeId;
@property(copy, readonly) NSString *inventoryGroupId;
@property(copy, nullable, readonly) NSString *inventoryGroupId;

@end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ - (id)initWithPublisherId:(NSString *)publisherId
_publisherId = [NSString stringWithString:publisherId];
_adUnitId = [NSString stringWithString:adUnitId];
_storeId = [NSString stringWithString:storeId];
_inventoryGroupId = [NSString stringWithString:inventoryGroupId];
if (inventoryGroupId != nil) {
_inventoryGroupId = [NSString stringWithString:inventoryGroupId];
}
return self;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ - (instancetype)initWithBanner:(CRBannerView *)ad {
@end

#define SERVER_PARAMETER \
@"{\"cpId\":\"testCpId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}"

#define SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID \
@"{\"cpId\":\"testCpId\",\"pubId\":\"testInventoryGroupId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}"

@implementation CRBannerCustomEventTests
Expand All @@ -68,6 +71,40 @@ - (void)testRequestBannerAdSuccess {
OCMStub([mockCRBannerView loadAd]);
OCMStub([mockCRBannerView setDelegate:customEvent]);

id mockCriteo = OCMClassMock([Criteo class]);
OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo);
OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId"
withInventoryGroupId:nil
withStoreId:@"testStoreId"
withAdUnits:@[ bannerAdUnit ]]);
OCMStub([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]);

[customEvent loadBannerForAdUnit:bannerAdUnit
mediationParams:params
childDirectedTreatment:mockChildDirectedTreatment];

OCMVerify([mockCRBannerView loadAd]);
OCMVerify([mockCRBannerView setDelegate:customEvent]);
OCMVerify([mockCriteo registerCriteoPublisherId:@"testCpId"
withInventoryGroupId:nil
withStoreId:@"testStoreId"
withAdUnits:@[ bannerAdUnit ]]);
OCMVerify([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]);
}

- (void)testRequestBannerAdSuccessWithInventoryGroupId {
NSNumber *mockChildDirectedTreatment = @YES;
CRBannerView *mockCRBannerView = OCMStrictClassMock([CRBannerView class]);
CRBannerAdUnit *bannerAdUnit = [[CRBannerAdUnit alloc] initWithAdUnitId:@"testAdUnitId"
size:CGSizeMake(320, 50)];
CRBannerCustomEvent *customEvent = [[CRBannerCustomEvent alloc] initWithBanner:mockCRBannerView];
CRGoogleMediationParameters *params =
[CRGoogleMediationParameters parametersFromJSONString:SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID
error:NULL];

OCMStub([mockCRBannerView loadAd]);
OCMStub([mockCRBannerView setDelegate:customEvent]);

id mockCriteo = OCMClassMock([Criteo class]);
OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo);
OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,4 +150,43 @@ - (void)testGoogleMediationParametersTotallyBadJson {
XCTAssertEqual(error.code, GADErrorInvalidArgument);
}

// Blank pubId
- (void)testGoogleMediationParametersBlankPubId {
NSError *error;
CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters
parametersFromJSONString:
@"{\"cpId\":\"B-056946\", \"pubId\":\"\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}"
error:&error];
XCTAssertNotNil(gmp);
XCTAssertEqualObjects(gmp.publisherId, @"B-056946");
XCTAssertNil(gmp.inventoryGroupId);
XCTAssertEqualObjects(gmp.adUnitId, @"/140800857/Endeavour_320x50");
XCTAssertEqualObjects(gmp.storeId, @"B-056946");
}

// Nil pubId
- (void)testGoogleMediationParametersNilPubId {
NSError *error;
CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters
parametersFromJSONString:
@"{\"cpId\":\"B-056946\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}"
error:&error];
XCTAssertNotNil(gmp);
XCTAssertEqualObjects(gmp.publisherId, @"B-056946");
XCTAssertNil(gmp.inventoryGroupId);
XCTAssertEqualObjects(gmp.adUnitId, @"/140800857/Endeavour_320x50");
XCTAssertEqualObjects(gmp.storeId, @"B-056946");
}

// Non-string pubId
- (void)testGoogleMediationParametersNonStringPubId {
NSError *error = [NSError new];
CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters
parametersFromJSONString:
@"{\"cpId\":\"B-056946\", \"pubId\":1, \"adUnitID\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}"
error:&error];
XCTAssertNil(gmp);
XCTAssertEqual(error.code, GADErrorInvalidArgument);
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ - (instancetype)initWithInterstitial:(CRInterstitial *)interstitial {
@end

#define SERVER_PARAMETER \
@"{\"cpId\":\"testCpId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}"

#define SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID \
@"{\"cpId\":\"testCpId\",\"pubId\":\"testInventoryGroupId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}"

@implementation CRInterstitialCustomEventTests
Expand All @@ -75,6 +78,45 @@ - (void)testLoadAndPresentFromRootViewController {
OCMStub([mockCRInterstitial presentFromRootViewController:realVC]);
OCMStub([mockCRInterstitial isAdLoaded]).andReturn(YES);

id mockCriteo = OCMStrictClassMock([Criteo class]);
OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo);
OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId"
withInventoryGroupId:nil
withStoreId:@"testStoreId"
withAdUnits:@[ interstitialAdUnit ]]);
OCMStub([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]);

[customEvent loadInterstitialForAdUnit:interstitialAdUnit
adConfiguration:params
childDirectedTreatment:mockChildDirectedTreatment];
[customEvent presentFromViewController:realVC];

OCMVerify([mockCRInterstitial loadAd]);
OCMVerify([mockCRInterstitial setDelegate:customEvent]);
OCMVerify([mockCRInterstitial presentFromRootViewController:realVC]);
OCMVerify([mockCriteo registerCriteoPublisherId:@"testCpId"
withInventoryGroupId:nil
withStoreId:@"testStoreId"
withAdUnits:@[ interstitialAdUnit ]]);
OCMVerify([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]);
}

- (void)testLoadAndPresentFromRootViewControllerWithInventoryGroupId {
NSNumber *mockChildDirectedTreatment = @YES;
CRInterstitial *mockCRInterstitial = OCMStrictClassMock([CRInterstitial class]);
CRInterstitialAdUnit *interstitialAdUnit =
[[CRInterstitialAdUnit alloc] initWithAdUnitId:@"testAdUnitId"];
CRInterstitialCustomEvent *customEvent =
[[CRInterstitialCustomEvent alloc] initWithInterstitial:mockCRInterstitial];
CRGoogleMediationParameters *params =
[CRGoogleMediationParameters parametersFromJSONString:SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID
error:NULL];
OCMStub([mockCRInterstitial loadAd]);
OCMStub([mockCRInterstitial setDelegate:customEvent]);
UIViewController *realVC = [UIViewController new];
OCMStub([mockCRInterstitial presentFromRootViewController:realVC]);
OCMStub([mockCRInterstitial isAdLoaded]).andReturn(YES);

id mockCriteo = OCMStrictClassMock([Criteo class]);
OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo);
OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId"
Expand Down
15 changes: 10 additions & 5 deletions CriteoPublisherSdk/Sources/Configuration/CR_RemoteConfigRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@
@interface CR_RemoteConfigRequest ()

@property(copy, nonatomic) NSString *criteoPublisherId;
@property(copy, nonatomic) NSString *inventoryGroupId;
@property(copy, nonatomic) NSString *sdkVersion;
@property(copy, nonatomic) NSString *appId;
@property(copy, nonatomic) NSNumber *profileId;
@property(copy, nonatomic) NSString *deviceModel;
@property(copy, nonatomic) NSString *deviceOs;
@property(copy, nonatomic, nullable) NSString *inventoryGroupId;

- (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId
inventoryGroupId:(NSString *)inventoryGroupId
inventoryGroupId:(nullable NSString *)inventoryGroupId
sdkVersion:(NSString *)sdkVersion
appId:(NSString *)appId
profileId:(NSNumber *)profileId
Expand All @@ -55,7 +55,7 @@ + (instancetype)requestWithConfig:(CR_Config *)config profileId:(NSNumber *)prof
}

- (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId
inventoryGroupId:(NSString *)inventoryGroupId
inventoryGroupId:(nullable NSString *)inventoryGroupId
sdkVersion:(NSString *)sdkVersion
appId:(NSString *)appId
profileId:(NSNumber *)profileId
Expand All @@ -76,15 +76,20 @@ - (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId
}

- (NSDictionary *)postBody {
return @{
NSMutableDictionary *body = [NSMutableDictionary dictionary];
NSDictionary *values = @{
@"cpId" : self.criteoPublisherId,
@"pubId" : self.inventoryGroupId,
@"bundleId" : self.appId,
@"sdkVersion" : self.sdkVersion,
@"rtbProfileId" : self.profileId,
@"deviceModel" : self.deviceModel,
@"deviceOs" : self.deviceOs
};
[body setValuesForKeysWithDictionary:values];
if (self.inventoryGroupId != nil) {
[body setObject:self.inventoryGroupId forKey:@"pubId"];
}
return body;
}

@end
22 changes: 19 additions & 3 deletions CriteoPublisherSdk/Sources/Criteo.m
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,28 @@ - (void)registerCriteoPublisherId:(NSString *)criteoPublisherId
withInventoryGroupId:(NSString *)inventoryGroupId
withStoreId:(NSString *)storeId
withAdUnits:(NSArray<CRAdUnit *> *)adUnits {
[self registerCriteoPublisherIdWrapper:criteoPublisherId
withInventoryGroupId:inventoryGroupId
withStoreId:storeId
withAdUnits:adUnits];
}

- (void)registerCriteoPublisherId:(NSString *)criteoPublisherId
withStoreId:(NSString *)storeId
withAdUnits:(NSArray<CRAdUnit *> *)adUnits {
[self registerCriteoPublisherIdWrapper:criteoPublisherId
withInventoryGroupId:nil
withStoreId:storeId
withAdUnits:adUnits];
}

- (void)registerCriteoPublisherIdWrapper:(NSString *)criteoPublisherId
withInventoryGroupId:(NSString *)inventoryGroupId
withStoreId:(NSString *)storeId
withAdUnits:(NSArray<CRAdUnit *> *)adUnits {
if (criteoPublisherId == nil || criteoPublisherId.length == 0) {
CRLogError(@"Registration", @"Invalid Criteo publisher ID: \"%@\"", criteoPublisherId);
}
if (inventoryGroupId == nil || inventoryGroupId.length == 0) {
CRLogError(@"Registration", @"Invalid Inventory ID: \"%@\"", inventoryGroupId);
}
if (storeId == nil || storeId.length == 0) {
CRLogError(@"Registration", @"Invalid store ID: \"%@\"", storeId);
}
Expand Down
10 changes: 10 additions & 0 deletions CriteoPublisherSdk/Sources/Public/Criteo.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ NS_ASSUME_NONNULL_BEGIN
withStoreId:(NSString *)storeId
withAdUnits:(NSArray<CRAdUnit *> *)adUnits;

/**
* Initialize Criteo singleton
* @param criteoPublisherId Publisher Identifier
* @param storeId Publisher's app store id
* @param adUnits AdUnits array
*/
- (void)registerCriteoPublisherId:(NSString *)criteoPublisherId
withStoreId:(NSString *)storeId
withAdUnits:(NSArray<CRAdUnit *> *)adUnits;

#pragma mark - Consent management

/** Set a custom opt-out/opt-in with same behaviour as the CCPA (US Privacy). */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,18 @@ - (void)testVerboseLogsEnabled {
}

- (void)testCriteoRegister_ShouldBeLogged {
[self.criteo registerCriteoPublisherId:self.publisherId withStoreId:@"" withAdUnits:self.adUnits];
OCMVerify([self.loggingMock logMessage:[OCMArg checkWithBlock:^BOOL(CR_LogMessage *logMessage) {
NSString *message = logMessage.message;
return [logMessage.tag isEqualToString:@"Registration"] &&
[message containsString:self.publisherId] &&
[message containsString:self.adUnits.description];
}]]);
}

- (void)testCriteoRegisterWithInventoryGroupId_ShouldBeLogged {
[self.criteo registerCriteoPublisherId:self.publisherId
withInventoryGroupId:@""
withInventoryGroupId:self.inventoryGroupId
withStoreId:@""
withAdUnits:self.adUnits];
OCMVerify([self.loggingMock logMessage:[OCMArg checkWithBlock:^BOOL(CR_LogMessage *logMessage) {
Expand All @@ -149,12 +159,10 @@ - (void)testCriteoRegister_ShouldBeLogged {

- (void)testCriteoRegisterTwice_ShouldBeLogged {
[self.criteo registerCriteoPublisherId:self.publisherId
withInventoryGroupId:self.inventoryGroupId
withStoreId:self.storeId
withAdUnits:self.adUnits];
OCMVerify([self.loggingMock logMessage:[OCMArg any]]);
[self.criteo registerCriteoPublisherId:self.publisherId
withInventoryGroupId:self.inventoryGroupId
withStoreId:self.storeId
withAdUnits:self.adUnits];
OCMVerify([self.loggingMock logMessage:[OCMArg checkWithBlock:^BOOL(CR_LogMessage *logMessage) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,32 @@ @interface CR_RemoteConfigRequestTests : XCTestCase
@implementation CR_RemoteConfigRequestTests

- (void)testToPostPayload_GivenConfig {
CR_Config *config = OCMClassMock([CR_Config class]);
OCMStub(config.criteoPublisherId).andReturn(@"myCpId");
OCMStub(config.inventoryGroupId).andReturn(nil);
OCMStub(config.sdkVersion).andReturn(@"1.3.3.7");
OCMStub(config.appId).andReturn(@"myAppId");
OCMStub(config.deviceModel).andReturn(@"myDeviceModel");
OCMStub(config.deviceOs).andReturn(@"myDeviceOs");
NSNumber *profileId = @42;

CR_RemoteConfigRequest *request = [CR_RemoteConfigRequest requestWithConfig:config
profileId:profileId];
NSDictionary *postBody = request.postBody;

NSDictionary *expected = @{
@"cpId" : @"myCpId",
@"bundleId" : @"myAppId",
@"sdkVersion" : @"1.3.3.7",
@"rtbProfileId" : profileId,
@"deviceModel" : @"myDeviceModel",
@"deviceOs" : @"myDeviceOs"
};

XCTAssertEqualObjects(postBody, expected);
}

- (void)testToPostPayloadWithInventoryGroupId_GivenConfig {
CR_Config *config = OCMClassMock([CR_Config class]);
OCMStub(config.criteoPublisherId).andReturn(@"myCpId");
OCMStub(config.inventoryGroupId).andReturn(@"myPubId");
Expand Down

0 comments on commit fc9ad0b

Please sign in to comment.