Skip to content

Commit

Permalink
chore: kickoff release
Browse files Browse the repository at this point in the history
  • Loading branch information
5d authored Jun 3, 2024
2 parents 8534d75 + d6583e6 commit 5bcd5f0
Show file tree
Hide file tree
Showing 74 changed files with 4,634 additions and 7 deletions.

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

0 comments on commit 5bcd5f0

Please sign in to comment.