diff --git a/NCMB.podspec b/NCMB.podspec index 0795eba8..e1540124 100644 --- a/NCMB.podspec +++ b/NCMB.podspec @@ -1,10 +1,10 @@ Pod::Spec.new do |s| s.name = "NCMB" - s.version = "3.0.2" + s.version = "3.0.3" s.summary = "NCMB is SDK for NIFCLOUD mobile backend." s.description = <<-DESC NCMB is SDK for NIFCLOUD mobile backend. - NIF Cloud mobile backend function + NIFCLOUD mobile backend function * Data store * Push Notification * User Management @@ -15,7 +15,7 @@ Pod::Spec.new do |s| s.license = "Apache License, Version 2.0" s.author = "FUJITSU CLOUD TECHNOLOGIES LIMITED" s.platform = :ios, "5.1" - s.source = { :git => 'https://github.com/NIFCloud-mbaas/ncmb_ios.git', :tag => 'v3.0.2' } + s.source = { :git => 'https://github.com/NIFCLOUD-mbaas/ncmb_ios.git', :tag => 'v3.0.3' } s.source_files = "NCMB/**/*.{h,m,c}" s.frameworks = "Foundation", "UIKit", "MobileCoreServices", "AudioToolbox", "SystemConfiguration" s.requires_arc = true diff --git a/NCMB/NCMBConstants.h b/NCMB/NCMBConstants.h index fcbf8c67..79c60900 100644 --- a/NCMB/NCMBConstants.h +++ b/NCMB/NCMBConstants.h @@ -22,7 +22,7 @@ #pragma mark - error #define ERRORDOMAIN @"NCMBErrorDomain" -#define SDK_VERSION @"3.0.2" +#define SDK_VERSION @"3.0.3" #define DATA_MAIN_PATH [NSHomeDirectory() stringByAppendingPathComponent:@"Library/"] #define COMMAND_CACHE_FOLDER_PATH [NSString stringWithFormat:@"%@/Private Documents/NCMB/Command Cache/", DATA_MAIN_PATH] diff --git a/NCMB/NCMBError.h b/NCMB/NCMBError.h index 584ab462..521e6478 100644 --- a/NCMB/NCMBError.h +++ b/NCMB/NCMBError.h @@ -18,7 +18,7 @@ #import /*! @abstract ncmb error domain */ -extern NSString const *kNCMBErrorDomain; +extern NSString * const kNCMBErrorDomain; extern NSInteger const NCMBErrorFacebookLoginCancelled; diff --git a/NCMB/NCMBError.m b/NCMB/NCMBError.m index 400cfad6..fadee6f0 100644 --- a/NCMB/NCMBError.m +++ b/NCMB/NCMBError.m @@ -17,7 +17,7 @@ #import "NCMBError.h" -NSString const *kNCMBErrorDomain = @"com.nifcloud.mbaas"; +NSString * const kNCMBErrorDomain = @"com.nifcloud.mbaas"; NSInteger const NCMBErrorFacebookLoginCancelled = 401004; diff --git a/NCMB/NCMBPush.m b/NCMB/NCMBPush.m index 1b64f60e..8d80fb49 100644 --- a/NCMB/NCMBPush.m +++ b/NCMB/NCMBPush.m @@ -151,9 +151,6 @@ + (void) handleRichPush:(NSDictionary *)userInfo { UIInterfaceOrientation orientation = [[UIApplication sharedApplication]statusBarOrientation]; [rv appearWebView:orientation url:urlStr]; } - NSURL *url = [NSURL URLWithString:urlStr]; - NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5]; - [rv loadRequest:req]; } } diff --git a/NCMB/NCMBRequest/NCMBRequest.h b/NCMB/NCMBRequest/NCMBRequest.h index 9ce68a7f..dfdf213e 100644 --- a/NCMB/NCMBRequest/NCMBRequest.h +++ b/NCMB/NCMBRequest/NCMBRequest.h @@ -28,6 +28,11 @@ header:(NSDictionary *)headers body:(NSDictionary *)body; +-(instancetype)initWithURLStringForUser:(NSString *)urlString + method:(NSString *)method + header:(NSDictionary *)headers + body:(NSDictionary *)body; + -(instancetype)initWithURL:(NSURL *)url method:(NSString *)method header:(NSDictionary *)headers diff --git a/NCMB/NCMBRequest/NCMBRequest.m b/NCMB/NCMBRequest/NCMBRequest.m index 1dd21885..34632ec7 100644 --- a/NCMB/NCMBRequest/NCMBRequest.m +++ b/NCMB/NCMBRequest/NCMBRequest.m @@ -97,6 +97,25 @@ -(instancetype)initWithURLString:(NSString *)urlString return [self initWithURL:url method:method header:headers bodyData:bodyData]; } +-(instancetype)initWithURLStringForUser:(NSString *)urlString + method:(NSString *)method + header:(NSDictionary *)headers + body:(NSDictionary *)body +{ + NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@/%@",kEndPoint,kAPIVersion,urlString]]; + NSData *bodyData = nil; + if (body != nil) { + NSError *error = nil; + bodyData = [NSJSONSerialization dataWithJSONObject:body + options:kNilOptions + error:&error]; + if (error) { + [NSException raise:NSInvalidArgumentException format:@"body data is invalid json format."]; + } + } + return [self initWithURL:url method:method header:headers bodyData:bodyData]; +} + +(NSString *)returnTimeStamp{ return [[NCMBDateFormat getIso8601DateFormat] stringFromDate:[NSDate date]]; } diff --git a/NCMB/NCMBRichPush/NCMBRichPushView.h b/NCMB/NCMBRichPush/NCMBRichPushView.h index f7430ffb..894dad22 100644 --- a/NCMB/NCMBRichPush/NCMBRichPushView.h +++ b/NCMB/NCMBRichPush/NCMBRichPushView.h @@ -16,8 +16,9 @@ #import #import +#import -@interface NCMBRichPushView : UIWebView +@interface NCMBRichPushView : UIViewController - (void) appearWebView:(UIInterfaceOrientation)interfaceOrientation url:(NSString*)richUrl; - (void) sizingWebView:(UIInterfaceOrientation)interfaceOrientation; diff --git a/NCMB/NCMBRichPush/NCMBRichPushView.m b/NCMB/NCMBRichPush/NCMBRichPushView.m index 3a941301..4bbb0abd 100644 --- a/NCMB/NCMBRichPush/NCMBRichPushView.m +++ b/NCMB/NCMBRichPush/NCMBRichPushView.m @@ -27,11 +27,11 @@ #define CLOSE_BUTTON_BOTTOM_MARGIN 5.0 #define CLOSE_BUTTON_LEFT_MARGIN 20.0 -@interface NCMBRichPushView() +@interface NCMBRichPushView() @property (nonatomic) UIView *cv; //clear view @property (nonatomic) UIView *uv; //ui view -@property (nonatomic) UIWebView *wv; // web view +@property (nonatomic) WKWebView *wv; // web view @property (nonatomic) UIButton* closeButton; @end @@ -59,8 +59,7 @@ - (void)appearWebView:(UIInterfaceOrientation)interfaceOrientation url:(NSString self.uv = [[UIView alloc]init]; - - self.wv = [[UIWebView alloc]init]; + self.wv = [[WKWebView alloc]init]; //make instance of closeImageView NCMBCloseImageView *closeImage = [[NCMBCloseImageView alloc]initWithFrame:CGRectMake(0, 5, CLOSE_BUTTON_WIDTH, CLOSE_IMAGE_FRAME_SIZE)]; @@ -121,10 +120,7 @@ - (void)appearWebView:(UIInterfaceOrientation)interfaceOrientation url:(NSString self.uv.layer.cornerRadius = 5; self.uv.clipsToBounds = YES; - //set webpage size to webview size - self.wv.scalesPageToFit = YES; - - self.wv.delegate = self; + self.wv.navigationDelegate = self; //add subview to main view [window.rootViewController.view addSubview:self.cv]; @@ -135,10 +131,13 @@ - (void)appearWebView:(UIInterfaceOrientation)interfaceOrientation url:(NSString self.uv.alpha = 1.0f; }]; + NSURL *url = [NSURL URLWithString:richUrl]; + NSURLRequest *req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5]; + [self.wv loadRequest:req]; } --(void)loadRequest:(NSURLRequest *)request{ - [self.wv loadRequest:request]; +- (WKNavigation *)loadRequest:(NSURLRequest *)request{ + return [self.wv loadRequest:request]; } - (void)resizeWebViewWithNotification:(NSNotification *)notification { @@ -237,29 +236,25 @@ -(void)endWebViewLoading{ [activity stopAnimating]; } -- (void)webViewDidFinishLoad:(UIWebView *)webView{ +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ [self endWebViewLoading]; } # pragma webview delegate -- (BOOL) webView:(UIWebView*) webView -shouldStartLoadWithRequest:(NSURLRequest*) request - navigationType:(UIWebViewNavigationType) navigationType -{ +- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{ [self startWebViewLoading]; - - return YES; + decisionHandler(WKNavigationActionPolicyAllow); } -- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{ +- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{ if ([error code] != NSURLErrorCancelled){ UIView* bg = [self.wv viewWithTag:ActivityIndicatorBackgroundTag]; [bg removeFromSuperview]; NSString *html = @"

ページを開けません。

"; NSData *bodyData = [html dataUsingEncoding:NSUTF8StringEncoding]; - [self.wv loadData:bodyData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[[NSURL alloc]init]]; + [self.wv loadData:bodyData MIMEType:@"text/html" characterEncodingName:@"utf-8" baseURL:[[NSURL alloc]init]]; } } diff --git a/NCMB/NCMBUser.m b/NCMB/NCMBUser.m index a5069fbb..d05926c1 100644 --- a/NCMB/NCMBUser.m +++ b/NCMB/NCMBUser.m @@ -664,14 +664,15 @@ +(NCMBRequest*)createConnectionForLogin:(NSString*)username //pathの作成 NSString *path = @""; for (int i = 0; i< [sortedQueryArray count]; i++){ + NSString * query = [sortedQueryArray[i] stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"#[]@!&()*+,;\"<>\\%^`{|} \b\t\n\a\r"] invertedSet]]; if (i == 0){ - path = [path stringByAppendingString:[NSString stringWithFormat:@"%@", sortedQueryArray[i]]]; + path = [path stringByAppendingString:[NSString stringWithFormat:@"%@", query]]; } else { - path = [path stringByAppendingString:[NSString stringWithFormat:@"&%@", sortedQueryArray[i]]]; + path = [path stringByAppendingString:[NSString stringWithFormat:@"&%@", query]]; } } NSString *url = [NSString stringWithFormat:@"login?%@", path]; - NCMBRequest *request = [[NCMBRequest alloc] initWithURLString:url + NCMBRequest *request = [[NCMBRequest alloc] initWithURLStringForUser:url method:@"GET" header:nil body:nil]; @@ -799,9 +800,7 @@ + (void)logOutInBackgroundWithBlock:(NCMBErrorResultBlock)block{ NCMBURLSession *session = [[NCMBURLSession alloc] initWithRequestAsync:request]; [session dataAsyncConnectionWithBlock:^(NSDictionary *responseData, NSError *requestError){ if (!requestError){ - if (!requestError) { - [self logOutEvent]; - } + [self logOutEvent]; } if(block){ block(requestError); @@ -930,12 +929,14 @@ - (NSMutableDictionary *)toJSONObjectForDataFile{ ローカルオブジェクトをリセットし、ログアウトする */ - (void)afterDelete{ - [super afterDelete]; + if ([NCMBUser currentUser]!= nil && [NCMBUser.currentUser.objectId isEqualToString:self.objectId]) { + [NCMBUser logOutEvent]; + } self.userName = nil; self.password = nil; self.sessionToken = nil; self.mailAddress = nil; - [NCMBUser logOutEvent]; + [super afterDelete]; } - (void)afterFetch:(NSMutableDictionary *)response isRefresh:(BOOL)isRefresh{ @@ -958,11 +959,7 @@ - (void)afterFetch:(NSMutableDictionary *)response isRefresh:(BOOL)isRefresh{ */ -(void)afterSave:(NSDictionary*)response operations:(NSMutableDictionary *)operations{ [super afterSave:response operations:operations]; - BOOL isHasTokenKey = NO; - if ([response objectForKey:@"sessionToken"]){ - [self setSessionToken:[response objectForKey:@"sessionToken"]]; - isHasTokenKey = YES; - } + //会員新規登録の有無 //if ([response objectForKey:@"createDate"]&&![response objectForKey:@"updateDate"]){ if ([response objectForKey:@"createDate"] && [response objectForKey:@"updateDate"]){ @@ -991,9 +988,11 @@ -(void)afterSave:(NSDictionary*)response operations:(NSMutableDictionary *)opera } [estimatedData setObject:converted forKey:@"authData"]; } + [NCMBUser saveToFileCurrentUser:self]; } - if([self isEqual:[NCMBUser currentUser]] || isHasTokenKey){ + if ([self.objectId isEqualToString:[NCMBUser currentUser].objectId]) { + self.sessionToken = [NCMBUser currentUser].sessionToken; [NCMBUser saveToFileCurrentUser:self]; } } diff --git a/NCMB/NCMB_Info.plist b/NCMB/NCMB_Info.plist index 74ecd7d3..68c10b7b 100644 --- a/NCMB/NCMB_Info.plist +++ b/NCMB/NCMB_Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.2 + 3.0.3 CFBundleSignature ???? CFBundleVersion diff --git a/NCMBTests/NCMBTests/NCMBInstallationSpec.m b/NCMBTests/NCMBTests/NCMBInstallationSpec.m index 6a3233c8..e5c56a4a 100644 --- a/NCMBTests/NCMBTests/NCMBInstallationSpec.m +++ b/NCMBTests/NCMBTests/NCMBInstallationSpec.m @@ -54,7 +54,7 @@ -(NSMutableDictionary *)beforeConnection; }, @"applicationName" : @"aaaa", @"objectId" : @"EVMu2ne7bjzZhOW2", - @"sdkVersion" : @"3.0.2" + @"sdkVersion" : @"3.0.3" }; NSDictionary *responseInstallation = @{@"channels" : @[ diff --git a/NCMBTests/NCMBTests/NCMBObjectSpec.m b/NCMBTests/NCMBTests/NCMBObjectSpec.m index 63d91918..943b1294 100644 --- a/NCMBTests/NCMBTests/NCMBObjectSpec.m +++ b/NCMBTests/NCMBTests/NCMBObjectSpec.m @@ -390,6 +390,579 @@ + (id)convertClass:(NSMutableDictionary*)result expect(error.code).to.equal(@403001); expect([error localizedDescription]).to.equal(@"No access with ACL."); }); + + it(@"after logged in should not change current user when fetch any object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"objectId" : @"e4YWYnYtcptTIV35", + @"message" : @"test msg", + @"createDate" : @"2014-06-03T11:28:30.348Z", + @"updateDate" : @"2014-06-03T11:28:30.348Z", + @"acl" : @{@"*":@{@"read":@true,@"write":@true}}}; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"e4YWYnYtcptTIV35"; + // 2. fetchInBackgroundWithBlock + [object fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(object.objectId).to.equal(@"e4YWYnYtcptTIV35"); + expect([object objectForKey:@"message"]).to.equal(@"test msg"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + done(); + }]; + + }]; + }); + }); + + it(@"after logged in should not change to current user when add new object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV35" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + [object setObject:@"message" forKey:@"hello NCMB!"]; + + [object saveInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(object.objectId).to.equal(@"e4YWYnYtcptTIV35"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }); + }); + + it(@"after logged in should not change current user when update any object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"updateDate" : @"2017-07-10T02:37:54.917Z" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"e4YWYnYtcptTIV35"; + [object setObject:@"message" forKey:@"new message"]; + + [object saveInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(object.objectId).to.equal(@"e4YWYnYtcptTIV35"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }); + }); + + it(@"after logged in should not change currentUser when delete any object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + NSDictionary *responseDic = @{} ; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"anotherObjectId"; + [object deleteInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }); + }); + + it(@"after login then logout then login should not change current user when fetch any object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + [NCMBUser logOut]; + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NSDictionary *responseDic = @{ @"objectId" : @"e4YWYnYtcptTIV35", + @"message" : @"test msg", + @"createDate" : @"2014-06-03T11:28:30.348Z", + @"updateDate" : @"2014-06-03T11:28:30.348Z", + @"acl" : @{@"*":@{@"read":@true,@"write":@true}}}; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"e4YWYnYtcptTIV35"; + // 2. fetchInBackgroundWithBlock + [object fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(object.objectId).to.equal(@"e4YWYnYtcptTIV35"); + expect([object objectForKey:@"message"]).to.equal(@"test msg"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + done(); + }]; + }]; + + }]; + }); + }); + + it(@"after login then logout then login should not change to current user when add new object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV35" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + [object setObject:@"message" forKey:@"hello NCMB!"]; + + [object saveInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(object.objectId).to.equal(@"e4YWYnYtcptTIV35"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login then logout then login should not change current user when update any object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"updateDate" : @"2017-07-10T02:37:54.917Z" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"e4YWYnYtcptTIV35"; + [object setObject:@"message" forKey:@"new message"]; + + [object saveInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(object.objectId).to.equal(@"e4YWYnYtcptTIV35"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login then logout then login should not change currentUser when delete any object", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + NSDictionary *responseDic = @{} ; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"anotherObjectId"; + [object deleteInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login fetch object with session token error E401001", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"code" : @"E401001", + @"error" : @"Authentication error by header incorrect."} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:401 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"e4YWYnYtcptTIV35"; + // 2. fetchInBackgroundWithBlock + [object fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beTruthy(); + expect(error.code).to.equal(@401001); + expect([error localizedDescription]).to.equal(@"Authentication error by header incorrect."); + done(); + }]; + + }]; + }); + }); + + it(@"after login fetch object with No data available error E404001", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"code" : @"E404001", + @"error" : @"No data available."} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:404 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBObject *object = [NCMBObject objectWithClassName:@"TestClass"]; + object.objectId = @"e4YWYnYtcptTIV35"; + // 2. fetchInBackgroundWithBlock + [object fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beTruthy(); + expect(error.code).to.equal(@404001); + expect([error localizedDescription]).to.equal(@"No data available."); + done(); + }]; + + }]; + }); + }); + }); diff --git a/NCMBTests/NCMBTests/NCMBUserSpec.m b/NCMBTests/NCMBTests/NCMBUserSpec.m index d9a0c6b5..201f89b9 100644 --- a/NCMBTests/NCMBTests/NCMBUserSpec.m +++ b/NCMBTests/NCMBTests/NCMBUserSpec.m @@ -832,7 +832,7 @@ -(NSMutableDictionary *)beforeConnection; expect(error).beNil(); if(!error) { NCMBUser *currentUser = [NCMBUser currentUser]; - expect(currentUser.sessionToken).beTruthy(); + expect([currentUser objectForKey:@"authData"]).beTruthy(); done(); } }]; @@ -880,7 +880,7 @@ -(NSMutableDictionary *)beforeConnection; expect(error).beNil(); if(!error) { NCMBUser *currentUser = [NCMBUser currentUser]; - expect(currentUser.sessionToken).beTruthy(); + expect([currentUser objectForKey:@"authData"]).beTruthy(); done(); } }]; @@ -925,7 +925,7 @@ -(NSMutableDictionary *)beforeConnection; expect(error).beNil(); if(!error) { NCMBUser *currentUser = [NCMBUser currentUser]; - expect(currentUser.sessionToken).beTruthy(); + expect([currentUser objectForKey:@"authData"]).beTruthy(); done(); } }]; @@ -960,13 +960,296 @@ -(NSMutableDictionary *)beforeConnection; expect(isCurrentUserFileExist).to.beTruthy(); }); + + it(@"after logged in should not change current user when fetch another user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"objectId" : @"e4YWYnYtcptTIV35", + @"userName" : @"testuser", + @"mailAddress" : @"your.mailaddress@example.com", + @"createDate" : @"2014-06-03T11:28:30.348Z", + @"updateDate" : @"2014-06-03T11:28:30.348Z", + @"acl" : @{@"*":@{@"read":@true,@"write":@true}}} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *anotherUser = [[NCMBUser alloc]init]; + anotherUser.objectId = @"e4YWYnYtcptTIV35"; + // 2. fetchInBackgroundWithBlock + [anotherUser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(anotherUser.objectId).to.equal(@"e4YWYnYtcptTIV35"); + expect(anotherUser.userName).to.equal(@"testuser"); + + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(currentUser.userName).to.equal(@"admin"); + done(); + }]; + + }]; + }); + }); + + it(@"after logged in should not change to current user when regist new user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV35", + @"sessionToken" : @"y3CY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"user1" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.新規ユーザー登録 + NCMBUser *regisUser = [NCMBUser user]; + + regisUser.userName = @"user1"; + regisUser.password = @"password1"; + + [regisUser signUpInBackgroundWithBlock:^(NSError *error) { + + NCMBUser *currentUser = [NCMBUser currentUser]; + // 3.登録したユーザーがカレントユーザーになります + expect(error).beNil(); + expect(currentUser).notTo.equal(regisUser); + + done(); + }]; + }]; + }); + }); + it(@"after logged in should not change current user when update another user", ^{ + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"updateDate" : @"2017-07-10T02:37:54.917Z" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.別のユーザーを変更する + NCMBUser *updateUser = [[NCMBUser alloc] init]; + updateUser.objectId = @"anotherObjectId"; + updateUser.userName = @"user001"; + + [updateUser saveInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + + // 3.カレントユーザーは変更したユーザーにならない + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + expect(currentUser).notTo.equal(updateUser); + + done(); + }]; + }]; + }); + }); + + it(@"after logged in should not change currentUser when delete another user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + NSDictionary *responseDic = @{} ; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *deleteUser = [[NCMBUser alloc] init]; + deleteUser.objectId = @"anotherObjectId"; + + [deleteUser deleteInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + + done(); + }]; + }]; + }); + }); + + it(@"after logged in should fetch currentUser success", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"objectId" : @"e4YWYnYtcptTIV23", + @"userName" : @"admin", + @"mailAddress" : @"your.mailaddress@example.com", + @"createDate" : @"2014-06-03T11:28:30.348Z", + @"updateDate" : @"2014-06-03T11:28:30.348Z", + @"acl" : @{@"*":@{@"read":@true,@"write":@true}}} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + currentUser = [NCMBUser currentUser]; + // 2. fetchInBackgroundWithBlock + [currentUser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + done(); + }]; + + }]; + }); + }); + + it(@"after logged in should change current user when update logged user", ^{ + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { - + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", @"objectId" : @"e4YWYnYtcptTIV23", @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", @@ -976,131 +1259,678 @@ -(NSMutableDictionary *)beforeConnection; NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:0 error:&convertErr]; - + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; }]; - + waitUntil(^(DoneCallback done) { // 1.ログインする [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { - + expect(error).beNil(); expect([NCMBUser currentUser]).notTo.beNil(); - + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { - + NSMutableDictionary *responseDic = [@{@"updateDate" : @"2017-07-10T02:37:54.917Z" } mutableCopy]; - + NSError *convertErr = nil; NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:0 error:&convertErr]; - + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; }]; - + // 2.別のユーザーを変更する NCMBUser *updateUser = [[NCMBUser alloc] init]; updateUser.objectId = @"e4YWYnYtcptTIV23"; updateUser.userName = @"user001"; - + [updateUser saveInBackgroundWithBlock:^(NSError *error) { NCMBUser *currentUser = [NCMBUser currentUser]; - + // 3.カレントユーザーは変更したユーザーにならない expect(error).beNil(); expect(currentUser).notTo.beNil(); - expect(currentUser).notTo.equal(updateUser); - + expect(currentUser).to.equal(updateUser); + done(); }]; }]; }); }); + + it(@"after logged in should using currentUser regist new user success", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV35", + @"sessionToken" : @"y3CY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"user1" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.新規ユーザー登録 + NCMBUser *regisUser = [NCMBUser currentUser]; + regisUser.objectId = nil; + regisUser.userName = @"user1"; + regisUser.password = @"password1"; + + [regisUser signUpInBackgroundWithBlock:^(NSError *error) { + + NCMBUser *currentUser = [NCMBUser currentUser]; + // 3.登録したユーザーがカレントユーザーになります + expect(error).beNil(); + expect(currentUser).to.equal(regisUser); + + done(); + }]; + + }]; + }); + }); + + it(@"after login should delete currentUser when delete logged in user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + NSDictionary *responseDic = @{} ; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *currentUser = [NCMBUser currentUser]; + NCMBUser *deleteUser = [[NCMBUser alloc] init]; + deleteUser.objectId = currentUser.objectId; + + [deleteUser deleteInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(error).beNil(); + expect(currentUser).beNil(); + + done(); + }]; + }]; + }); + }); + + it(@"after login then logout then login should fetch currentUser success", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + NSDictionary *responseDic = @{ @"objectId" : @"e4YWYnYtcptTIV23", + @"userName" : @"admin", + @"mailAddress" : @"your.mailaddress@example.com", + @"createDate" : @"2014-06-03T11:28:30.348Z", + @"updateDate" : @"2014-06-03T11:28:30.348Z", + @"acl" : @{@"*":@{@"read":@true,@"write":@true}}} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *currentUser = [NCMBUser currentUser]; + // 2. fetchInBackgroundWithBlock + [currentUser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + done(); + }]; + }]; + + }]; + }); + }); + + it(@"after login then logout then login should change current user when update logged user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"updateDate" : @"2017-07-10T02:37:54.917Z" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.別のユーザーを変更する + NCMBUser *updateUser = [[NCMBUser alloc] init]; + updateUser.objectId = @"e4YWYnYtcptTIV23"; + updateUser.userName = @"user001"; + + [updateUser saveInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + + // 3.カレントユーザーは変更したユーザーにならない + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + expect(currentUser).to.equal(updateUser); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login then logout then login should using currentUser regist new user success", ^{ - it(@"even not logged in should not become current user when update any user", ^{ - // 1.念のためログアウトする [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { - NSData *responseData = [[NSData alloc]init]; + NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; }]; - [NCMBUser logOut]; - - // 2.新規ユーザー登録 - NCMBUser *updateUser = [[NCMBUser alloc] init]; - updateUser.objectId = @"e4YWYnYtcptTIV23"; - updateUser.userName = @"user001"; - waitUntil(^(DoneCallback done) { - [updateUser saveInBackgroundWithBlock:^(NSError *error) { - NCMBUser *currentUser = [NCMBUser currentUser]; + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { - // 3.ログインしていなくても変更したユーザーにならない expect(error).beNil(); - expect(currentUser).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); - done(); + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV35", + @"sessionToken" : @"y3CY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"user1" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.新規ユーザー登録 + NCMBUser *regisUser = [NCMBUser currentUser]; + regisUser.objectId = nil; + regisUser.userName = @"user1"; + regisUser.password = @"password1"; + + [regisUser signUpInBackgroundWithBlock:^(NSError *error) { + + NCMBUser *currentUser = [NCMBUser currentUser]; + // 3.登録したユーザーがカレントユーザーになります + expect(error).beNil(); + expect(currentUser).to.equal(regisUser); + + done(); + }]; + }]; }]; }); }); + + it(@"after login then logout then login should delete currentUser when delete logged in user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; - it(@"should become current user when regist new user", ^{ + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + NSDictionary *responseDic = @{} ; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + + + NCMBUser *currentUser = [NCMBUser currentUser]; + NCMBUser *deleteUser = [[NCMBUser alloc] init]; + deleteUser.objectId = currentUser.objectId; + + [deleteUser deleteInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(error).beNil(); + expect(currentUser).beNil(); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login then logout then login should fetch another user success", ^{ [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { - NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", @"objectId" : @"e4YWYnYtcptTIV23", @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", - @"userName" : @"user1" + @"userName" : @"admin" } mutableCopy]; NSError *convertErr = nil; NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:0 error:&convertErr]; - return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; }]; - // 1.新規ユーザー登録 - NCMBUser *user = [NCMBUser user]; - - user.userName = @"user1"; - user.password = @"password1"; - waitUntil(^(DoneCallback done) { - [user signUpInBackgroundWithBlock:^(NSError *error) { - NCMBUser *currentUser = [NCMBUser currentUser]; - // 2.登録したユーザーがカレントユーザーになります + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; expect(currentUser).notTo.beNil(); - expect(currentUser).equal(user); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + NSDictionary *responseDic = @{ @"objectId" : @"e4YWYnYtcptTIV35", + @"userName" : @"testuser", + @"mailAddress" : @"your.mailaddress@example.com", + @"createDate" : @"2014-06-03T11:28:30.348Z", + @"updateDate" : @"2014-06-03T11:28:30.348Z", + @"acl" : @{@"*":@{@"read":@true,@"write":@true}}} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *anotherUser = [[NCMBUser alloc]init]; + anotherUser.objectId = @"e4YWYnYtcptTIV35"; + // 2. fetchInBackgroundWithBlock + [anotherUser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + expect(anotherUser.objectId).to.equal(@"e4YWYnYtcptTIV35"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + done(); + }]; + }]; - done(); }]; }); - }); - - it(@"after logged in should change to current user when regist new user", ^{ + }); + + it(@"after login then logout then login should not change current user when update another user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"updateDate" : @"2017-07-10T02:37:54.917Z" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.別のユーザーを変更する + NCMBUser *updateUser = [[NCMBUser alloc] init]; + updateUser.objectId = @"e4YWYnYtcptTIV35"; + updateUser.userName = @"user001"; + + [updateUser saveInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + + // 3.カレントユーザーは変更したユーザーにならない + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login then logout then login should regist new user success", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV35", + @"sessionToken" : @"y3CY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"user1" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + // 2.新規ユーザー登録 + NCMBUser *regisUser = [[NCMBUser alloc]init]; + regisUser.userName = @"user1"; + regisUser.password = @"password1"; + + [regisUser signUpInBackgroundWithBlock:^(NSError *error) { + + NCMBUser *currentUser = [NCMBUser currentUser]; + // 3.登録したユーザーがカレントユーザーになります + expect(error).beNil(); + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"after login then logout then login should not change currentUser when delete another user", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [NCMBUser logOut]; + + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + expect(error).beNil(); + expect([NCMBUser currentUser]).notTo.beNil(); + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + NSDictionary *responseDic = @{} ; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:200 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + + NCMBUser *deleteUser = [[NCMBUser alloc] init]; + deleteUser.objectId = @"anotherObjectId"; + + [deleteUser deleteInBackgroundWithBlock:^(NSError *error) { + expect(error).beNil(); + + NCMBUser *currentUser = [NCMBUser currentUser]; + expect(currentUser).notTo.beNil(); + expect(currentUser.objectId).to.equal(@"e4YWYnYtcptTIV23"); + + done(); + }]; + }]; + }]; + }); + }); + + it(@"should not become current user when regist new user", ^{ [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { - NSMutableDictionary *responseDic = [@{@"objectId" : @"e4YWYnYtcptTIV23", + NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", + @"objectId" : @"newObjectId", @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", - @"userName" : @"admin" + @"userName" : @"user1" } mutableCopy]; + NSError *convertErr = nil; NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:0 @@ -1109,49 +1939,53 @@ -(NSMutableDictionary *)beforeConnection; return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; }]; - waitUntil(^(DoneCallback done) { - // 1.ログインする - [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + // 1.新規ユーザー登録 + NCMBUser *user = [NCMBUser user]; + user.userName = @"user1"; + user.password = @"password1"; + + waitUntil(^(DoneCallback done) { + [user signUpInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; + // 2.登録したユーザーがカレントユーザーになります expect(error).beNil(); - expect([NCMBUser currentUser]).notTo.beNil(); + expect(currentUser).notTo.equal(user); - [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { - return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; - } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + done(); + }]; + }); + }); + + it(@"even not logged in should not become current user when update any user", ^{ + // 1.念のためログアウトする + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { - NSMutableDictionary *responseDic = [@{@"createDate" : @"2017-01-31T04:13:03.065Z", - @"objectId" : @"e4YWYnYtcptTIV23", - @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", - @"userName" : @"user1" - } mutableCopy]; + NSData *responseData = [[NSData alloc]init]; - NSError *convertErr = nil; - NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic - options:0 - error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; - return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; - }]; + [NCMBUser logOut]; - // 2.新規ユーザー登録 - NCMBUser *regisUser = [NCMBUser user]; + // 2.新規ユーザー登録 + NCMBUser *updateUser = [[NCMBUser alloc] init]; + updateUser.objectId = @"e4YWYnYtcptTIV23"; + updateUser.userName = @"user001"; - regisUser.userName = @"user1"; - regisUser.password = @"password1"; + waitUntil(^(DoneCallback done) { + [updateUser saveInBackgroundWithBlock:^(NSError *error) { + NCMBUser *currentUser = [NCMBUser currentUser]; - [regisUser signUpInBackgroundWithBlock:^(NSError *error) { + // 3.ログインしていなくても変更したユーザーにならない + expect(error).beNil(); + expect(currentUser).beNil(); - NCMBUser *currentUser = [NCMBUser currentUser]; - // 3.登録したユーザーがカレントユーザーになります - expect(error).beNil(); - expect(currentUser).equal(regisUser); - - done(); - }]; - - }]; - }); + done(); + }]; + }); }); it(@"should update data local when update current user", ^{ @@ -1323,10 +2157,10 @@ -(NSMutableDictionary *)beforeConnection; [user signUpInBackgroundWithBlock:^(NSError *error) { expect(error).beNil(); NCMBUser *currentUser = NCMBUser.currentUser; - expect(currentUser.objectId).to.equal(@"epaKcaYZqsREdSMY"); - expect(currentUser.sessionToken).to.equal(@"iXDIelJRY3ULBdms281VTmc5O"); - expect(currentUser.userName).to.equal(@"NCMBUser"); - expect([currentUser objectForKey:@"key"]).to.equal(@"value"); + expect(currentUser.objectId).notTo.equal(@"epaKcaYZqsREdSMY"); + expect(currentUser.sessionToken).notTo.equal(@"iXDIelJRY3ULBdms281VTmc5O"); + expect(currentUser.userName).notTo.equal(@"NCMBUser"); + expect([currentUser objectForKey:@"key"]).notTo.equal(@"value"); done(); }]; }); @@ -1380,10 +2214,10 @@ -(NSMutableDictionary *)beforeConnection; [user signUp:&error]; expect(error).beNil(); NCMBUser *currentUser = NCMBUser.currentUser; - expect(currentUser.objectId).to.equal(@"epaKcaYZqsREdSMY"); - expect(currentUser.sessionToken).to.equal(@"iXDIelJRY3ULBdms281VTmc5O"); - expect(currentUser.userName).to.equal(@"NCMBUser"); - expect([currentUser objectForKey:@"key"]).to.equal(@"value"); + expect(currentUser.objectId).notTo.equal(@"epaKcaYZqsREdSMY"); + expect(currentUser.sessionToken).notTo.equal(@"iXDIelJRY3ULBdms281VTmc5O"); + expect(currentUser.userName).notTo.equal(@"NCMBUser"); + expect([currentUser objectForKey:@"key"]).notTo.equal(@"value"); }); it(@"signUp error test", ^{ @@ -1445,6 +2279,43 @@ -(NSMutableDictionary *)beforeConnection; }]; }); }); + + it(@"logInWithUsernameInBackground passwd_special_char", ^{ + NSDictionary *responseDic = @{ @"objectId" : @"09Mp23m4bEOInUqT", + @"mailAddress" : [NSNull null], + @"mailAddressConfirm" : [NSNull null], + @"sessionToken" : @"iXDIelJRY3ULBdms281VTmc5O", + @"updateDate" : @"2013-08-30T05:32:03.868Z", + @"userName" : @"NCMBUser", + @"key":@"value", + @"createDate" : @"2013-08-28T07:46:09.801Z"} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + NSString *query = @"password=test%21%22%23$%25%26'%28%29%2A%2B%2C-./:%3B%3C=%3E?%40%5B%5C%5D%5E_%60%7B%7C%7D~test&userName=NCMBUser"; + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"] && [[request.URL query] isEqualToString:query]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + [NCMBUser logInWithUsernameInBackground:@"NCMBUser" password:@"test!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~test" block:^(NCMBUser *user, NSError *error) { + expect(error).beNil(); + expect(user.objectId).to.equal(@"09Mp23m4bEOInUqT"); + expect(user.sessionToken).to.equal(@"iXDIelJRY3ULBdms281VTmc5O"); + expect(user.userName).to.equal(@"NCMBUser"); + expect([user objectForKey:@"key"]).to.equal(@"value"); + + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser.objectId).to.equal(@"09Mp23m4bEOInUqT"); + expect(currentUser.sessionToken).to.equal(@"iXDIelJRY3ULBdms281VTmc5O"); + expect(currentUser.userName).to.equal(@"NCMBUser"); + expect([currentUser objectForKey:@"key"]).to.equal(@"value"); + done(); + }]; + }); + }); it(@"logInWithUsernameInBackground error test", ^{ NSDictionary *responseDic = @{ @"code" : @"E400000", @@ -1468,6 +2339,214 @@ -(NSMutableDictionary *)beforeConnection; }]; }); }); + + it(@"after login fetch user with session token error E401001", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"code" : @"E401001", + @"error" : @"Authentication error by header incorrect."} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:401 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *fetchuser = [[NCMBUser alloc]init]; + fetchuser.objectId = @"e4YWYnYtcptTIV23"; + // 2. fetchInBackgroundWithBlock + [fetchuser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beTruthy(); + expect(error.code).to.equal(@401001); + expect([error localizedDescription]).to.equal(@"Authentication error by header incorrect."); + done(); + }]; + + }]; + }); + }); + + it(@"after login fetch using currentUser with session token error E401001", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"code" : @"E401001", + @"error" : @"Authentication error by header incorrect."} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:401 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *fetchuser = [NCMBUser currentUser]; + fetchuser.objectId = @"e4YWYnYtcptTIV23"; + // 2. fetchInBackgroundWithBlock + [fetchuser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beTruthy(); + expect(error.code).to.equal(@401001); + expect([error localizedDescription]).to.equal(@"Authentication error by header incorrect."); + done(); + }]; + + }]; + }); + }); + + it(@"after login fetch user with No data available error E404001", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"code" : @"E404001", + @"error" : @"No data available."} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:404 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *fetchuser = [[NCMBUser alloc]init]; + fetchuser.objectId = @"invalidObjectId"; + // 2. fetchInBackgroundWithBlock + [fetchuser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beTruthy(); + expect(error.code).to.equal(@404001); + expect([error localizedDescription]).to.equal(@"No data available."); + done(); + }]; + + }]; + }); + }); + + it(@"after login fetch using currentUser with No data available error E404001", ^{ + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + + NSMutableDictionary *responseDic = [@{@"createDate" : @"2014-06-03T11:28:30.348Z", + @"objectId" : @"e4YWYnYtcptTIV23", + @"sessionToken" : @"yDCY0ggL8hZghFQ70aiutHtJL", + @"userName" : @"admin" + } mutableCopy]; + + NSError *convertErr = nil; + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic + options:0 + error:&convertErr]; + return [OHHTTPStubsResponse responseWithData:responseData statusCode:201 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + waitUntil(^(DoneCallback done) { + // 1.ログインする + [NCMBUser logInWithUsernameInBackground:@"admin" password:@"123456" block:^(NCMBUser *user, NSError *error) { + + expect(error).beNil(); + NCMBUser *currentUser = NCMBUser.currentUser; + expect(currentUser).notTo.beNil(); + + NSDictionary *responseDic = @{ @"code" : @"E404001", + @"error" : @"No data available."} ; + + NSData *responseData = [NSJSONSerialization dataWithJSONObject:responseDic options:NSJSONWritingPrettyPrinted error:nil]; + + [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) { + return [request.URL.host isEqualToString:@"mbaas.api.nifcloud.com"]; + } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) { + return [OHHTTPStubsResponse responseWithData:responseData statusCode:404 headers:@{@"Content-Type":@"application/json;charset=UTF-8"}]; + }]; + + NCMBUser *fetchuser = [NCMBUser currentUser]; + fetchuser.objectId = @"invalidObjectId"; + // 2. fetchInBackgroundWithBlock + [fetchuser fetchInBackgroundWithBlock:^(NSError *error) { + expect(error).beTruthy(); + expect(error.code).to.equal(@404001); + expect([error localizedDescription]).to.equal(@"No data available."); + done(); + }]; + + }]; + }); + }); it(@"logInWithUsername system test", ^{ NSDictionary *responseDic = @{ @"objectId" : @"09Mp23m4bEOInUqT", @@ -1563,11 +2642,7 @@ -(NSMutableDictionary *)beforeConnection; expect(error).beTruthy(); expect(error.code).to.equal(@400000); expect([error localizedDescription]).to.equal(@"Bad Request."); - - NCMBUser *user = NCMBUser.currentUser; - expect(user.objectId).beNil(); - expect(user.sessionToken).beNil(); - expect(user.userName).beNil(); + done(); }]; }); diff --git a/Readme.md b/Readme.md index 0dcf79d6..776d6fc9 100644 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,6 @@ # ニフクラ mobile backend iOS SDKについて -[![Build Status](https://travis-ci.org/NIFCloud-mbaas/ncmb_ios.svg?branch=master)](https://travis-ci.org/NIFCloud-mbaas/ncmb_ios) +[![Build Status](https://travis-ci.org/NIFCLOUD-mbaas/ncmb_ios.svg?branch=master)](https://travis-ci.org/NIFCLOUD-mbaas/ncmb_ios) ## 概要 @@ -33,9 +33,9 @@ テクニカルサポート窓口では、1年半以内にリリースされたSDKに対してのみサポート対応させていただきます。
定期的なバージョンのアップデートにご協力ください。
※なお、mobile backend にて大規模な改修が行われた際は、1年半以内のSDKであっても対応出来ない場合がございます。
-その際は[informationブログ](http://info.biz.nifty.com/mb/)にてお知らせいたします。予めご了承ください。 +その際は[informationブログ](https://mbaas.nifcloud.com/info/)にてお知らせいたします。予めご了承ください。 -- v3.0.0 ~ (※2019年9月時点) +- v3.0.0 ~ (※2019年12月時点) ## ライセンス @@ -45,4 +45,4 @@ - [ニフクラ mobile backend](https://mbaas.nifcloud.com/) - [ドキュメント](https://mbaas.nifcloud.com/doc/current/) -- [ユーザーコミュニティ](https://github.com/NIFCloud-mbaas/UserCommunity) +- [ユーザーコミュニティ](https://github.com/NIFCLOUD-mbaas/UserCommunity)