Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: kickoff release #3736

Merged
merged 2 commits into from
Jun 3, 2024
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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@ import XCTest
@_spi(InternalAmplifyConfiguration) @testable import Amplify
@testable import APIHostApp
@testable import AWSPluginsCore
import AWSCognitoAuthPlugin

class AWSAPIPluginGen2GraphQLBaseTest: XCTestCase {

var defaultTestEmail = "test-\(UUID().uuidString)@amazon.com"

var amplifyConfig: AmplifyOutputsData!

override func setUp() {
Expand All @@ -39,11 +42,15 @@ class AWSAPIPluginGen2GraphQLBaseTest: XCTestCase {
/// Setup API with given models
/// - Parameter models: DataStore models
func setup(withModels models: AmplifyModelRegistration,
logLevel: LogLevel = .verbose) async {
logLevel: LogLevel = .verbose,
withAuthPlugin: Bool = false) async {
do {
setupConfig()
Amplify.Logging.logLevel = logLevel
try Amplify.add(plugin: AWSAPIPlugin(modelRegistration: models))
if withAuthPlugin {
try Amplify.add(plugin: AWSCognitoAuthPlugin())
}
try Amplify.configure(amplifyConfig)

} catch {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

import Amplify
import XCTest

enum AuthSignInHelper {

static func signOut() async {
let session = try? await Amplify.Auth.fetchAuthSession()
if session?.isSignedIn ?? false {
_ = await Amplify.Auth.signOut()
}
}

static func signUpUser(
username: String,
password: String,
email: String,
phoneNumber: String? = nil) async throws -> Bool {

var userAttributes = [
AuthUserAttribute(.email, value: email)
]

if let phoneNumber = phoneNumber {
userAttributes.append(AuthUserAttribute(.phoneNumber, value: phoneNumber))
}

let options = AuthSignUpRequest.Options(
userAttributes: userAttributes)
let result = try await Amplify.Auth.signUp(username: username, password: password, options: options)
return result.isSignUpComplete
}

static func signInUser(username: String, password: String) async throws -> AuthSignInResult {
return try await Amplify.Auth.signIn(username: username, password: password, options: nil)
}

static func registerAndSignInUser(
username: String,
password: String,
email: String,
phoneNumber: String? = nil) async throws -> Bool {
await signOut()
let signedUp = try await AuthSignInHelper.signUpUser(
username: username,
password: password,
email: email,
phoneNumber: phoneNumber)
guard signedUp else {
throw AuthError.invalidState("Auth sign up failed", "", nil)
}
let result = try await AuthSignInHelper.signInUser(username: username, password: password)
return result.isSignedIn
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

import Foundation
import XCTest
@testable import Amplify

final class GraphQLLocationPostUser1Tests: AWSAPIPluginGen2GraphQLBaseTest {

// Code Snippet for
// https://docs.amplify.aws/swift/build-a-backend/data/data-modeling/add-fields/#specify-an-enum-field-type
func testCodeSnippet() async throws {
await setup(withModels: PostUserLocation1Models())

let post = Post(
location: .init(
lat: 48.837006,
long: 8.28245))
let createdPost = try await Amplify.API.mutate(request: .create(post)).get()
print("\(createdPost)")

XCTAssertEqual(createdPost.location?.lat, 48.837006)
XCTAssertEqual(createdPost.location?.long, 8.28245)
}
}

extension GraphQLLocationPostUser1Tests: DefaultLogger { }

extension GraphQLLocationPostUser1Tests {
typealias Post = Post1
typealias User = User1
typealias Location = Location1

struct PostUserLocation1Models: AmplifyModelRegistration {
public let version: String = "version"
func registerModels(registry: ModelRegistry.Type) {
ModelRegistry.register(modelType: Post1.self)
ModelRegistry.register(modelType: User1.self)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// swiftlint:disable all
import Amplify
import Foundation

extension Location1 {
// MARK: - CodingKeys
public enum CodingKeys: String, ModelKey {
case lat
case long
}

public static let keys = CodingKeys.self
// MARK: - ModelSchema

public static let schema = defineSchema { model in
let location1 = Location1.keys

model.listPluralName = "Location1s"
model.syncPluralName = "Location1s"

model.fields(
.field(location1.lat, is: .optional, ofType: .double),
.field(location1.long, is: .optional, ofType: .double)
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// swiftlint:disable all
import Amplify
import Foundation

public struct Location1: Embeddable {
var lat: Double?
var long: Double?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// swiftlint:disable all
import Amplify
import Foundation

extension Post1 {
// MARK: - CodingKeys
public enum CodingKeys: String, ModelKey {
case id
case location
case content
case createdAt
case updatedAt
}

public static let keys = CodingKeys.self
// MARK: - ModelSchema

public static let schema = defineSchema { model in
let post1 = Post1.keys

model.authRules = [
rule(allow: .public, provider: .apiKey, operations: [.create, .update, .delete, .read])
]

model.listPluralName = "Post1s"
model.syncPluralName = "Post1s"

model.attributes(
.primaryKey(fields: [post1.id])
)

model.fields(
.field(post1.id, is: .required, ofType: .string),
.field(post1.location, is: .optional, ofType: .embedded(type: Location1.self)),
.field(post1.content, is: .optional, ofType: .string),
.field(post1.createdAt, is: .optional, isReadOnly: true, ofType: .dateTime),
.field(post1.updatedAt, is: .optional, isReadOnly: true, ofType: .dateTime)
)
}
public class Path: ModelPath<Post1> { }

public static var rootPath: PropertyContainerPath? { Path() }
}

extension Post1: ModelIdentifiable {
public typealias IdentifierFormat = ModelIdentifierFormat.Default
public typealias IdentifierProtocol = DefaultModelIdentifier<Self>
}
extension ModelPath where ModelType == Post1 {
public var id: FieldPath<String> {
string("id")
}
public var content: FieldPath<String> {
string("content")
}
public var createdAt: FieldPath<Temporal.DateTime> {
datetime("createdAt")
}
public var updatedAt: FieldPath<Temporal.DateTime> {
datetime("updatedAt")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// swiftlint:disable all
import Amplify
import Foundation

public struct Post1: Model {
public let id: String
public var location: Location1?
public var content: String?
public var createdAt: Temporal.DateTime?
public var updatedAt: Temporal.DateTime?

public init(id: String = UUID().uuidString,
location: Location1? = nil,
content: String? = nil) {
self.init(id: id,
location: location,
content: content,
createdAt: nil,
updatedAt: nil)
}
internal init(id: String = UUID().uuidString,
location: Location1? = nil,
content: String? = nil,
createdAt: Temporal.DateTime? = nil,
updatedAt: Temporal.DateTime? = nil) {
self.id = id
self.location = location
self.content = content
self.createdAt = createdAt
self.updatedAt = updatedAt
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// swiftlint:disable all
import Amplify
import Foundation

extension User1 {
// MARK: - CodingKeys
public enum CodingKeys: String, ModelKey {
case id
case lastKnownLocation
case createdAt
case updatedAt
}

public static let keys = CodingKeys.self
// MARK: - ModelSchema

public static let schema = defineSchema { model in
let user1 = User1.keys

model.authRules = [
rule(allow: .public, provider: .apiKey, operations: [.create, .update, .delete, .read])
]

model.listPluralName = "User1s"
model.syncPluralName = "User1s"

model.attributes(
.primaryKey(fields: [user1.id])
)

model.fields(
.field(user1.id, is: .required, ofType: .string),
.field(user1.lastKnownLocation, is: .optional, ofType: .embedded(type: Location1.self)),
.field(user1.createdAt, is: .optional, isReadOnly: true, ofType: .dateTime),
.field(user1.updatedAt, is: .optional, isReadOnly: true, ofType: .dateTime)
)
}
public class Path: ModelPath<User1> { }

public static var rootPath: PropertyContainerPath? { Path() }
}

extension User1: ModelIdentifiable {
public typealias IdentifierFormat = ModelIdentifierFormat.Default
public typealias IdentifierProtocol = DefaultModelIdentifier<Self>
}
extension ModelPath where ModelType == User1 {
public var id: FieldPath<String> {
string("id")
}
public var createdAt: FieldPath<Temporal.DateTime> {
datetime("createdAt")
}
public var updatedAt: FieldPath<Temporal.DateTime> {
datetime("updatedAt")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// swiftlint:disable all
import Amplify
import Foundation

public struct User1: Model {
public let id: String
public var lastKnownLocation: Location1?
public var createdAt: Temporal.DateTime?
public var updatedAt: Temporal.DateTime?

public init(id: String = UUID().uuidString,
lastKnownLocation: Location1? = nil) {
self.init(id: id,
lastKnownLocation: lastKnownLocation,
createdAt: nil,
updatedAt: nil)
}
internal init(id: String = UUID().uuidString,
lastKnownLocation: Location1? = nil,
createdAt: Temporal.DateTime? = nil,
updatedAt: Temporal.DateTime? = nil) {
self.id = id
self.lastKnownLocation = lastKnownLocation
self.createdAt = createdAt
self.updatedAt = updatedAt
}
}
Loading
Loading