Skip to content

Commit

Permalink
Address review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
thisisabhash committed Nov 1, 2023
1 parent c444b07 commit a60be2a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -204,15 +204,16 @@ public class AWSMultiAuthModeStrategy: AuthModeStrategy {
/// - operations: model operations
/// - Returns: an iterator for the applicable auth rules
public func authTypesFor(schema: ModelSchema,
operations: [ModelOperation]) async -> AWSAuthorizationTypeIterator {
var applicableAuthRules = Set<AuthRule>()
for operation in operations {
let rules = schema.authRules.filter(modelOperation: operation)
applicableAuthRules = applicableAuthRules.union(Set(rules))
}
operations: [ModelOperation]) async -> AWSAuthorizationTypeIterator {
var sortedRules = operations
.flatMap { schema.authRules.filter(modelOperation: $0) }
.reduce(into: [AuthRule](), { array, rule in
if !array.contains(rule) {
array.append(rule)
}
})
.sorted(by: AWSMultiAuthModeStrategy.comparator)

var sortedRules = applicableAuthRules.sorted(by: AWSMultiAuthModeStrategy.comparator)

// if there isn't a user signed in, returns only public or custom rules
if let authDelegate = authDelegate, await !authDelegate.isUserLoggedIn() {
sortedRules = sortedRules.filter { rule in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import XCTest
@testable import AWSPluginsCore

class AuthModeStrategyTests: XCTestCase {

// Given: default strategy and a model schema
// When: authTypesFor for .create operation is called
// Then: an empty iterator is returned
Expand All @@ -20,7 +20,7 @@ class AuthModeStrategyTests: XCTestCase {
let authTypesIterator = authMode.authTypesFor(schema: AnyModelTester.schema, operation: .create)
XCTAssertEqual(authTypesIterator.count, 0)
}

// Given: multi-auth strategy and a model schema
// When: authTypesFor for .create operation is called
// Then: auth types are returned in order according to priority rules
Expand All @@ -31,7 +31,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
XCTAssertEqual(authTypesIterator.next(), .apiKey)
}

// Given: multi-auth strategy and a model schema without auth provider
// When: auth types are requested
// Then: default values based on the auth strategy should be returned
Expand All @@ -42,7 +42,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
XCTAssertEqual(authTypesIterator.next(), .apiKey)
}

// Given: multi-auth strategy and a model schema with 4 auth rules
// When: authTypesFor for .create operation is called
// Then: applicable auth types are ordered according to priority rules
Expand All @@ -55,7 +55,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
XCTAssertEqual(authTypesIterator.next(), .awsIAM)
}

// Given: multi-auth strategy and a model schema multiple public rules
// When: authTypesFor for .create operation is called
// Then: applicable auth types are ordered according to priority rules
Expand All @@ -68,7 +68,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .awsIAM)
XCTAssertEqual(authTypesIterator.next(), .apiKey)
}

// Given: multi-auth strategy and a model schema
// When: authTypesFor for .create operation is called
// Then: applicable auth types returned are only the
Expand All @@ -80,7 +80,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
}

// Given: multi-auth strategy a model schema
// When: authTypesFor for .create operation is called for unauthenticated user
// Then: applicable auth types returned are only public rules
Expand All @@ -94,7 +94,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.count, 1)
XCTAssertEqual(authTypesIterator.next(), .apiKey)
}

// Given: multi-auth model schema with a custom strategy
// When: authTypesFor for .create operation is called
// Then: applicable auth types returned respect the priority rules
Expand All @@ -107,22 +107,22 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
XCTAssertEqual(authTypesIterator.next(), .awsIAM)
}

// Given: multi-auth model schema with a custom strategy
// When: authTypesFor for .create operation is called for unauthenticated user
// Then: applicable auth types returned are public rules or custom
func testMultiAuthPriorityUnauthenticatedUserWithCustom() async {
let authMode = AWSMultiAuthModeStrategy()
let delegate = UnauthenticatedUserDelegate()
authMode.authDelegate = delegate

var authTypesIterator = await authMode.authTypesFor(schema: ModelWithCustomStrategy.schema,
operation: .create)
XCTAssertEqual(authTypesIterator.count, 2)
XCTAssertEqual(authTypesIterator.next(), .function)
XCTAssertEqual(authTypesIterator.next(), .awsIAM)
}

// Given: multi-auth strategy and a model schema without auth provider
// When: auth types are requested with multiple operation
// Then: default values based on the auth strategy should be returned
Expand All @@ -133,7 +133,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.next(), .amazonCognitoUserPools)
XCTAssertEqual(authTypesIterator.next(), .apiKey)
}

// Given: multi-auth strategy and a model schema with auth provider
// When: auth types are requested with multiple operation
// Then: auth rule for public access should be returned
Expand All @@ -145,7 +145,7 @@ class AuthModeStrategyTests: XCTestCase {
XCTAssertEqual(authTypesIterator.count, 1)
XCTAssertEqual(authTypesIterator.next(), .apiKey)
}

}

// MARK: - Test models
Expand Down

0 comments on commit a60be2a

Please sign in to comment.