b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * The contents of this file are subject to the terms of the Common Development and
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * Distribution License (the License). You may not use this file except in compliance with the
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * specific language governing permission and limitations under the License.
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * When distributing Covered Software, include this CDDL Header Notice in each file and include
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * Header, with the fields enclosed by brackets [] replaced by your own identifying
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * information: "Portions copyright [year] [name of copyright owner]".
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni * Copyright 2016 ForgeRock AS.
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni#import "FRAMessageUtils.h"
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni#import "FRAMockURLProtocol.h"
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantonistatic NSString * const url = @"http://any.website.com";
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantonistatic NSString * const messageId = @"message id";
9ebd9a731316dfd624ce3bcc4ea6519d10899936Ken Stubbingsstatic NSString * const base64Secret = @"c2VjcmV0";
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantonistatic NSTimeInterval const testTimeout = 10.0;
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni [FRAMockURLProtocol setResponseHeaders:nil];
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni XCTestExpectation *expectation = [self expectationWithDescription:@"asynchronous request"];
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings handler:^(NSInteger statusCode, NSError *error) {
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings NSURLRequest *request = [FRAMockURLProtocol getRequest];
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects([request HTTPMethod], @"POST");
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni [self waitForExpectationsWithTimeout:testTimeout handler:nil];
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni XCTestExpectation *expectation = [self expectationWithDescription:@"asynchronous request"];
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings handler:^(NSInteger statusCode, NSError *error) {
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings NSURLRequest *request = [FRAMockURLProtocol getRequest];
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqual(request.URL.absoluteString, url);
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni [self waitForExpectationsWithTimeout:testTimeout handler:nil];
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni XCTestExpectation *expectation = [self expectationWithDescription:@"asynchronous request"];
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings handler:^(NSInteger statusCode, NSError *error) {
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings NSURLRequest *request = [FRAMockURLProtocol getRequest];
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects([request valueForHTTPHeaderField:@"Content-Type"], @"application/json");
b3a21de0a0e0a5dea71bece7e5c0356700136fbcDiego Colantoni [self waitForExpectationsWithTimeout:testTimeout handler:nil];
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings NSString* altertJwt = @"eyAidHlwIjogIkpXVCIsICJhbGciOiAiSFMyNTYiIH0.eyAiYyI6ICJKZVlTTXlLdW9QbldmRHVXaU1GVGlENlc2WTNQOWVYTVBYUDljNUEvSEJNPSIsICJ0IjogIjEyMCIsICJ1IjogIjMiLCAibCI6ICJZVzFzWW1OdmIydHBaVDFoYld4aVkyOXZhMmxsUFRBeCIgfQ.1SAWJlT-5vjYRbpZ_57K-NpFRs4VZbSzZjAF_3RTu7k";
6a2ae9c7fb4d2c40d75cab0edaf940f22c18224fDiego Colantoni NSDictionary* dictionary = [FRAMessageUtils extractJTWBodyFromString:altertJwt error:nil];
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects([dictionary valueForKey:@"c"], @"JeYSMyKuoPnWfDuWiMFTiD6W6Y3P9eXMPXP9c5A/HBM=");
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects([dictionary valueForKey:@"l"], @"YW1sYmNvb2tpZT1hbWxiY29va2llPTAx");
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects([dictionary valueForKey:@"t"], @"120");
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen Stubbings XCTAssertEqualObjects([dictionary valueForKey:@"u"], @"3");
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings XCTestExpectation *expectation = [self expectationWithDescription:@"request with cookie"];
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings handler:^(NSInteger statusCode, NSError *error) {
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings NSURLRequest *request = [FRAMockURLProtocol getRequest];
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings cookiesWithResponseHeaderFields:[request allHTTPHeaderFields]
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings NSHTTPCookie *actualCookie = cookies.firstObject;
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings XCTAssertTrue([@"amlbcookie" isEqualToString:actualCookie.name]);
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings XCTAssertTrue([@"03" isEqualToString:actualCookie.value]);
5d37db6a3aca50ba14cba8909d3ae44f7d43e407Ken Stubbings [self waitForExpectationsWithTimeout:testTimeout handler:nil];
cb0f7f3d422b5b0eebe075af32a90a58072c6b5fDiego Colantoni XCTestExpectation *expectation = [self expectationWithDescription:@"request with api version header"];
cb0f7f3d422b5b0eebe075af32a90a58072c6b5fDiego Colantoni handler:^(NSInteger statusCode, NSError *error) {
cb0f7f3d422b5b0eebe075af32a90a58072c6b5fDiego Colantoni NSURLRequest *request = [FRAMockURLProtocol getRequest];
cb0f7f3d422b5b0eebe075af32a90a58072c6b5fDiego Colantoni NSDictionary<NSString *, NSString *> *headers = [request allHTTPHeaderFields];
cb0f7f3d422b5b0eebe075af32a90a58072c6b5fDiego Colantoni NSString *acceptAPIVersionHeader = [headers valueForKey:@"Accept-API-Version"];
cb0f7f3d422b5b0eebe075af32a90a58072c6b5fDiego Colantoni XCTAssertEqualObjects(acceptAPIVersionHeader, @"resource=1.0, protocol=1.0");