Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
shopify_iossdk
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cemarose
shopify_iossdk
Commits
6968716d
Commit
6968716d
authored
Apr 29, 2016
by
Dima Bart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add more customer tests, add support for customer authentication header.
parent
a1298552
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
137 additions
and
4 deletions
+137
-4
BUYClientTest.m
Mobile Buy SDK/Mobile Buy SDK Tests/BUYClientTest.m
+121
-0
BUYClient+Customers.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Customers.h
+0
-2
BUYClient+Customers.m
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Customers.m
+2
-2
BUYClient.h
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.h
+2
-0
BUYClient.m
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.m
+12
-0
No files found.
Mobile Buy SDK/Mobile Buy SDK Tests/BUYClientTest.m
View file @
6968716d
...
@@ -34,6 +34,10 @@
...
@@ -34,6 +34,10 @@
#import "BUYCollection+Additions.h"
#import "BUYCollection+Additions.h"
#import "NSURLComponents+BUYAdditions.h"
#import "NSURLComponents+BUYAdditions.h"
#import "BUYShopifyErrorCodes.h"
#import "BUYShopifyErrorCodes.h"
#import "BUYAccountCredentials.h"
#import "BUYClient+Customers.h"
NSString
*
const
BUYFakeCustomerToken
=
@"dsfasdgafdg"
;
@interface
BUYClient
()
@interface
BUYClient
()
...
@@ -319,4 +323,121 @@
...
@@ -319,4 +323,121 @@
XCTAssertEqualObjects
(
requestQueryItems
,
queryItems
);
XCTAssertEqualObjects
(
requestQueryItems
,
queryItems
);
}
}
#pragma mark - Customer Tests -
-
(
void
)
testCustomerCreationURL
{
BUYAccountCredentialItem
*
firstName
=
[
BUYAccountCredentialItem
itemWithKey
:
@"first_name"
value
:
@"michael"
];
BUYAccountCredentialItem
*
lastName
=
[
BUYAccountCredentialItem
itemWithKey
:
@"last_name"
value
:
@"scott"
];
BUYAccountCredentialItem
*
email
=
[
BUYAccountCredentialItem
itemWithKey
:
@"email"
value
:
@"fake@example.com"
];
BUYAccountCredentialItem
*
password
=
[
BUYAccountCredentialItem
itemWithKey
:
@"password"
value
:
@"password"
];
BUYAccountCredentialItem
*
passwordConfirmation
=
[
BUYAccountCredentialItem
itemWithKey
:
@"password_confirmation"
value
:
@"password"
];
BUYAccountCredentials
*
credentials
=
[
BUYAccountCredentials
credentialsWithItems
:@[
firstName
,
lastName
,
email
,
password
,
passwordConfirmation
]];
NSURLSessionDataTask
*
task
=
[
self
.
client
createCustomerWithCredentials
:
credentials
callback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"POST"
);
NSError
*
error
=
nil
;
NSDictionary
*
payload
=
[
NSJSONSerialization
JSONObjectWithData
:
task
.
originalRequest
.
HTTPBody
options
:
0
error
:&
error
];
XCTAssertNil
(
error
);
NSDictionary
*
dict
=
@{
@"customer"
:
@{
@"first_name"
:
firstName
.
value
,
@"last_name"
:
lastName
.
value
,
@"email"
:
email
.
value
,
@"password"
:
password
.
value
,
@"password_confirmation"
:
passwordConfirmation
.
value
}};
XCTAssertEqualObjects
(
payload
,
dict
);
}
-
(
void
)
testLoginCustomerURL
{
BUYAccountCredentialItem
*
email
=
[
BUYAccountCredentialItem
itemWithKey
:
@"email"
value
:
@"fake@example.com"
];
BUYAccountCredentialItem
*
password
=
[
BUYAccountCredentialItem
itemWithKey
:
@"password"
value
:
@"password"
];
BUYAccountCredentials
*
credentials
=
[
BUYAccountCredentials
credentialsWithItems
:@[
email
,
password
]];
NSURLSessionDataTask
*
task
=
[
self
.
client
loginCustomerWithCredentials
:
credentials
callback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers/customer_token.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"POST"
);
NSError
*
error
=
nil
;
NSDictionary
*
payload
=
[
NSJSONSerialization
JSONObjectWithData
:
task
.
originalRequest
.
HTTPBody
options
:
0
error
:&
error
];
XCTAssertNil
(
error
);
NSDictionary
*
dict
=
@{
@"customer"
:
@{
@"email"
:
email
.
value
,
@"password"
:
password
.
value
}};
XCTAssertEqualObjects
(
payload
,
dict
);
}
-
(
void
)
testGetCustomerURL
{
NSURLSessionDataTask
*
task
=
[
self
.
client
getCustomerWithID
:
nil
callback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"GET"
);
XCTAssertEqualObjects
(
self
.
client
.
customerToken
,
task
.
originalRequest
.
allHTTPHeaderFields
[
BUYClientCustomerAccessToken
]);
}
-
(
void
)
testGetOrdersForCustomerURL
{
NSURLSessionDataTask
*
task
=
[
self
.
client
getOrdersForCustomerWithCallback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers/orders.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"GET"
);
XCTAssertEqualObjects
(
self
.
client
.
customerToken
,
task
.
originalRequest
.
allHTTPHeaderFields
[
BUYClientCustomerAccessToken
]);
}
-
(
void
)
testCustomerRecovery
{
NSString
*
email
=
@"fake@example.com"
;
NSURLSessionDataTask
*
task
=
[
self
.
client
recoverPasswordForCustomer
:
email
callback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers/recover.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"POST"
);
NSError
*
error
=
nil
;
NSDictionary
*
payload
=
[
NSJSONSerialization
JSONObjectWithData
:
task
.
originalRequest
.
HTTPBody
options
:
0
error
:&
error
];
XCTAssertNil
(
error
);
NSDictionary
*
dict
=
@{
@"email"
:
email
};
XCTAssertEqualObjects
(
payload
,
dict
);
}
-
(
void
)
testTokenRenewal
{
self
.
client
.
customerToken
=
nil
;
NSURLSessionDataTask
*
task
=
[
self
.
client
renewCustomerTokenWithID
:
nil
callback
:
^
(
NSString
*
token
,
NSError
*
error
)
{}];
XCTAssertNil
(
task
);
// task should be nil if no customer token was set on the client
self
.
client
.
customerToken
=
BUYFakeCustomerToken
;
task
=
[
self
.
client
renewCustomerTokenWithID
:
@"1"
callback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers/1/customer_token/renew.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"PUT"
);
}
-
(
void
)
testCustomerActivation
{
BUYAccountCredentialItem
*
passwordItem
=
[
BUYAccountCredentialItem
itemWithKey
:
@"password"
value
:
@"12345"
];
BUYAccountCredentialItem
*
passwordConfItem
=
[
BUYAccountCredentialItem
itemWithKey
:
@"password_confirmation"
value
:
@"12345"
];
BUYAccountCredentials
*
credentials
=
[
BUYAccountCredentials
credentialsWithItems
:@[
passwordItem
,
passwordConfItem
]];
NSString
*
customerID
=
@"12345"
;
NSString
*
customerToken
=
@"12345"
;
NSURLSessionDataTask
*
task
=
[
self
.
client
activateCustomerWithCredentials
:
credentials
customerID
:
customerID
customerToken
:
customerToken
callback
:
nil
];
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
scheme
,
@"https"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
URL
.
path
,
@"/api/customers/12345/activate.json"
);
XCTAssertEqualObjects
(
task
.
originalRequest
.
HTTPMethod
,
@"PUT"
);
}
@end
@end
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Customers.h
View file @
6968716d
...
@@ -12,8 +12,6 @@
...
@@ -12,8 +12,6 @@
@class
BUYOrder
;
@class
BUYOrder
;
@class
BUYAccountCredentials
;
@class
BUYAccountCredentials
;
NSString
*
const
BUYClientCustomerAccessToken
=
@"X-Shopify-Customer-Access-Token"
;
/**
/**
* Return block containing a BUYCustomer object for an existing customer of the shop
* Return block containing a BUYCustomer object for an existing customer of the shop
*
*
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient+Customers.m
View file @
6968716d
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
{
{
NSURLComponents
*
components
=
[
self
URLComponentsForCustomerWithID
:
customerID
];
NSURLComponents
*
components
=
[
self
URLComponentsForCustomerWithID
:
customerID
];
return
[
self
getRequestForURL
:
components
.
URL
completionHandler
:
^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
return
[
self
getRequestForURL
:
components
.
URL
completionHandler
:
^
(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
)
{
block
((
json
&&
!
error
?
[[
BUYCustomer
alloc
]
initWithDictionary
:
json
]
:
nil
),
error
);
block
((
json
&&
!
error
?
[[
BUYCustomer
alloc
]
initWithDictionary
:
json
[
@"customer"
]
]
:
nil
),
error
);
}];
}];
}
}
...
@@ -75,7 +75,7 @@
...
@@ -75,7 +75,7 @@
}];
}];
}
}
else
{
else
{
block
([[
BUYCustomer
alloc
]
initWithDictionary
:
json
],
self
.
customerToken
,
error
);
block
([[
BUYCustomer
alloc
]
initWithDictionary
:
json
[
@"customer"
]
],
self
.
customerToken
,
error
);
}
}
}
}
else
{
else
{
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.h
View file @
6968716d
...
@@ -78,6 +78,8 @@ typedef NS_ENUM(NSUInteger, BUYCollectionSort) {
...
@@ -78,6 +78,8 @@ typedef NS_ENUM(NSUInteger, BUYCollectionSort) {
extern
NSString
*
const
BUYVersionString
;
extern
NSString
*
const
BUYVersionString
;
extern
NSString
*
const
BUYClientCustomerAccessToken
;
/**
/**
* A BUYStatus is associated with the completion of an enqueued job on Shopify.
* A BUYStatus is associated with the completion of an enqueued job on Shopify.
* BUYStatus is equal is HTTP status codes returned from the server
* BUYStatus is equal is HTTP status codes returned from the server
...
...
Mobile Buy SDK/Mobile Buy SDK/Data/BUYClient.m
View file @
6968716d
...
@@ -48,6 +48,7 @@
...
@@ -48,6 +48,7 @@
#define kGET @"GET"
#define kGET @"GET"
#define kPOST @"POST"
#define kPOST @"POST"
#define kPATCH @"PATCH"
#define kPATCH @"PATCH"
#define kPUT @"PUT"
#define kDELETE @"DELETE"
#define kDELETE @"DELETE"
#define kJSONType @"application/json"
#define kJSONType @"application/json"
...
@@ -60,6 +61,8 @@ NSString * const BUYVersionString = @"1.2.6";
...
@@ -60,6 +61,8 @@ NSString * const BUYVersionString = @"1.2.6";
static
NSString
*
const
kBUYClientPathProductPublications
=
@"product_listings"
;
static
NSString
*
const
kBUYClientPathProductPublications
=
@"product_listings"
;
static
NSString
*
const
kBUYClientPathCollectionPublications
=
@"collection_listings"
;
static
NSString
*
const
kBUYClientPathCollectionPublications
=
@"collection_listings"
;
NSString
*
const
BUYClientCustomerAccessToken
=
@"X-Shopify-Customer-Access-Token"
;
@interface
BUYClient
()
<
NSURLSessionDelegate
>
@interface
BUYClient
()
<
NSURLSessionDelegate
>
@property
(
nonatomic
,
strong
)
NSString
*
shopDomain
;
@property
(
nonatomic
,
strong
)
NSString
*
shopDomain
;
...
@@ -664,6 +667,10 @@ static NSString *const kBUYClientPathCollectionPublications = @"collection_listi
...
@@ -664,6 +667,10 @@ static NSString *const kBUYClientPathCollectionPublications = @"collection_listi
[
request
addValue
:
kJSONType
forHTTPHeaderField
:
@"Content-Type"
];
[
request
addValue
:
kJSONType
forHTTPHeaderField
:
@"Content-Type"
];
[
request
addValue
:
kJSONType
forHTTPHeaderField
:
@"Accept"
];
[
request
addValue
:
kJSONType
forHTTPHeaderField
:
@"Accept"
];
if
(
self
.
customerToken
)
{
[
request
addValue
:
self
.
customerToken
forHTTPHeaderField
:
BUYClientCustomerAccessToken
];
}
request
.
HTTPMethod
=
method
;
request
.
HTTPMethod
=
method
;
NSURLSessionDataTask
*
task
=
[
self
.
session
dataTaskWithRequest
:
request
completionHandler
:
^
(
NSData
*
data
,
NSURLResponse
*
response
,
NSError
*
error
)
{
NSURLSessionDataTask
*
task
=
[
self
.
session
dataTaskWithRequest
:
request
completionHandler
:
^
(
NSData
*
data
,
NSURLResponse
*
response
,
NSError
*
error
)
{
NSInteger
statusCode
=
[(
NSHTTPURLResponse
*
)
response
statusCode
];
NSInteger
statusCode
=
[(
NSHTTPURLResponse
*
)
response
statusCode
];
...
@@ -715,6 +722,11 @@ static NSString *const kBUYClientPathCollectionPublications = @"collection_listi
...
@@ -715,6 +722,11 @@ static NSString *const kBUYClientPathCollectionPublications = @"collection_listi
return
[
self
requestForURL
:
url
method
:
kPOST
object
:
object
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
kPOST
object
:
object
completionHandler
:
completionHandler
];
}
}
-
(
NSURLSessionDataTask
*
)
putRequestForURL
:
(
NSURL
*
)
url
body
:
(
NSData
*
)
body
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
))
completionHandler
{
return
[
self
requestForURL
:
url
method
:
kPUT
body
:
body
completionHandler
:
completionHandler
];
}
-
(
NSURLSessionDataTask
*
)
postRequestForURL
:
(
NSURL
*
)
url
body
:
(
NSData
*
)
body
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
))
completionHandler
-
(
NSURLSessionDataTask
*
)
postRequestForURL
:
(
NSURL
*
)
url
body
:
(
NSData
*
)
body
completionHandler
:
(
void
(
^
)(
NSDictionary
*
json
,
NSURLResponse
*
response
,
NSError
*
error
))
completionHandler
{
{
return
[
self
requestForURL
:
url
method
:
kPOST
body
:
body
completionHandler
:
completionHandler
];
return
[
self
requestForURL
:
url
method
:
kPOST
body
:
body
completionHandler
:
completionHandler
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment