Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions AVOS/LeanCloudObjcTests/BaseTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ class BaseTestCase: XCTestCase {
super.tearDown()
}

override func setUp() {
super.setUp()
LCUser.logOut()
}

override func tearDown() {
LCUser.logOut()
super.tearDown()
Expand Down
42 changes: 42 additions & 0 deletions AVOS/LeanCloudObjcTests/LCUserTestCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -330,4 +330,46 @@ class LCUserTestCase: BaseTestCase {
}
}
}

func testStrictlyFind() {
expecting { exp in
LCUser.loginAnonymously { user, error in
XCTAssertNotNil(user)
XCTAssertNil(error)
exp.fulfill()
}
}
guard let user = LCUser.current() else {
XCTFail()
return
}
let hiddenField = "hiddenField"
let exposedField = "exposedField"
user[hiddenField] = uuid
user[exposedField] = uuid
XCTAssertTrue(user.save())

expecting { exp in
let query = LCQuery()
query.whereKey(hiddenField, equalTo: user[hiddenField] ?? "")
LCUser.strictlyFind(with: query) { users, error in
XCTAssertTrue(Thread.isMainThread)
XCTAssertNil(users)
XCTAssertNotNil(error)
exp.fulfill()
}
}

expecting { exp in
let query = LCQuery()
query.whereKey(exposedField, equalTo: user[exposedField] ?? "")
LCUser.strictlyFind(with: query) { users, error in
XCTAssertTrue(Thread.isMainThread)
XCTAssertEqual(users?.count, 1)
XCTAssertEqual(users?.first?.objectId, user.objectId)
XCTAssertNil(error)
exp.fulfill()
}
}
}
}
31 changes: 11 additions & 20 deletions AVOS/Sources/Foundation/Query/LCQuery.m
Original file line number Diff line number Diff line change
Expand Up @@ -1012,39 +1012,30 @@ + (NSDictionary *)dictionaryFromIncludeKeys:(NSArray *)array {

- (NSMutableDictionary *)assembleParameters {
[self.parameters removeAllObjects];

if ([self.where allKeys].count > 0)
{
if (self.where.count > 0) {
[self.parameters setObject:[self whereString] forKey:@"where"];
}

if (self.limit > 0)
{
if (self.limit > 0) {
[self.parameters setObject:@(self.limit) forKey:@"limit"];
}
if (self.skip > 0)
{
if (self.skip > 0) {
[self.parameters setObject:@(self.skip) forKey:@"skip"];
}
if (self.order.length > 0)
{
if (self.order.length > 0) {
[self.parameters setObject:self.order forKey:@"order"];
}
if (self.include.count > 0)
{
NSString * myIncludes = [[self.include allObjects] componentsJoinedByString:@","];
[self.parameters setObject:myIncludes forKey:@"include"];
if (self.include.count > 0) {
NSString *includes = [[self.include allObjects] componentsJoinedByString:@","];
[self.parameters setObject:includes forKey:@"include"];
}
if (self.selectedKeys.count > 0)
{
NSString * keys = [[self.selectedKeys allObjects] componentsJoinedByString:@","];
if (self.selectedKeys.count > 0) {
NSString *keys = [[self.selectedKeys allObjects] componentsJoinedByString:@","];
[self.parameters setObject:keys forKey:@"keys"];
}
if (self.includeACL)
{
if (self.includeACL) {
[self.parameters setObject:@"true" forKey:@"returnACL"];
}
if ([self.extraParameters allKeys].count > 0) {
if (self.extraParameters.count > 0) {
[self.parameters addEntriesFromDictionary:self.extraParameters];
}
return self.parameters;
Expand Down
2 changes: 1 addition & 1 deletion AVOS/Sources/Foundation/Query/LCQuery_Internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
@property (nonatomic) NSMutableSet<NSString *> *selectedKeys;
@property (nonatomic, strong) NSMutableDictionary *extraParameters;

- (NSDictionary *)assembleParameters;
- (NSMutableDictionary *)assembleParameters;
+ (NSDictionary *)dictionaryFromIncludeKeys:(NSArray *)array;
- (NSString *)queryPath;
-(void)queryWithBlock:(NSString *)path
Expand Down
9 changes: 9 additions & 0 deletions AVOS/Sources/Foundation/User/LCUser.h
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,15 @@ FOUNDATION_EXPORT LeanCloudSocialPlatform const LeanCloudSocialPlatformWeiXin;
*/
- (BOOL)isAnonymous;

// MARK: Strictly Find

/// More restrictive on query conditions to find user.
/// Constraints: NOT support `skip`; NOT support the protected fields; NOT support `inQuery` ...
/// @param query The query conditions.
/// @param callback Result callback.
+ (void)strictlyFindWithQuery:(LCQuery *)query
callback:(void (^)(NSArray<LCUser *> * _Nullable users, NSError * _Nullable error))callback;

@end

/**
Expand Down
26 changes: 25 additions & 1 deletion AVOS/Sources/Foundation/User/LCUser.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#import "LCObject_Internal.h"
#import "LCPaasClient.h"
#import "LCUtils_Internal.h"
#import "LCQuery.h"
#import "LCQuery_Internal.h"
#import "LCPersistenceUtils.h"
#import "LCObjectUtils.h"
#import "LCPaasClient.h"
Expand Down Expand Up @@ -1191,6 +1191,30 @@ - (BOOL)isAnonymous
return [[self linkedServiceNames] containsObject:anonymousTag];
}

// MARK: Strictly Find

+ (void)strictlyFindWithQuery:(LCQuery *)query
callback:(void (^)(NSArray<LCUser *> * _Nullable, NSError * _Nullable))callback
{
[[LCPaasClient sharedInstance] getObject:@"users/strictlyQuery"
withParameters:[query assembleParameters]
block:^(id _Nullable object, NSError * _Nullable error) {
NSMutableArray<LCUser *> *users;
if (!error && [NSDictionary _lc_isTypeOf:object]) {
NSArray *results = [NSArray _lc_decoding:object key:@"results"];
users = [NSMutableArray arrayWithCapacity:results.count];
for (NSDictionary *dictionary in results) {
if ([NSDictionary _lc_isTypeOf:dictionary]) {
LCUser *user = (LCUser *)[LCObjectUtils lcObjectForClass:[LCUser userTag]];
[LCObjectUtils copyDictionary:dictionary toObject:user];
[users addObject:user];
}
}
}
[LCUtils callArrayResultBlock:callback array:users error:error];
}];
}

#pragma mark - Override from LCObject

/**
Expand Down