127 lines
4.2 KiB
Swift
127 lines
4.2 KiB
Swift
//
|
|
// Copyright Amazon.com Inc. or its affiliates.
|
|
// All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
import XCTest
|
|
import Amplify
|
|
import AmplifyTestCommon
|
|
|
|
class ModelIdentifierTests: XCTestCase {
|
|
override func setUp() {
|
|
|
|
// default primary keys models
|
|
ModelRegistry.register(modelType: Post.self)
|
|
|
|
// custom primary keys models
|
|
ModelRegistry.register(modelType: ModelImplicitDefaultPk.self)
|
|
ModelRegistry.register(modelType: ModelExplicitDefaultPk.self)
|
|
ModelRegistry.register(modelType: ModelExplicitCustomPk.self)
|
|
|
|
ModelRegistry.register(modelType: ModelCompositePk.self)
|
|
|
|
// custom pk based on indexes
|
|
ModelRegistry.register(modelType: CustomerWithMultipleFieldsinPK.self)
|
|
|
|
// custom pk based on primaryKey field
|
|
ModelRegistry.register(modelType: ModelCustomPkDefined.self)
|
|
|
|
// legacy pk
|
|
ModelRegistry.register(modelType: CustomerOrder.self)
|
|
}
|
|
|
|
// MARK: - ModelIdentifier string value
|
|
|
|
func testModelIdentifierDefaultId() {
|
|
let model = Post(title: "title", content: "", createdAt: Temporal.DateTime.now())
|
|
XCTAssertEqual(model.identifier, model.id)
|
|
}
|
|
|
|
func testModelIdentifierImplicitDefault() {
|
|
let model = ModelImplicitDefaultPk(name: "name")
|
|
XCTAssertEqual(model.identifier, model.id)
|
|
}
|
|
|
|
func testModelIdentifierExplicitId() {
|
|
let model = ModelExplicitDefaultPk(name: "name")
|
|
XCTAssertEqual(model.identifier, model.id)
|
|
}
|
|
|
|
func testModelIdentifierCustomField() {
|
|
let model = ModelExplicitCustomPk(userId: "userId")
|
|
XCTAssertEqual(model.identifier, model.userId)
|
|
}
|
|
|
|
func testModelIdentifierCompositeKey() {
|
|
let model = ModelCompositePk(id: "id", dob: Temporal.DateTime.now(), name: "name")
|
|
XCTAssertEqual(model.identifier, "\"\(model.id)\"#\"\(model.dob.iso8601String)\"")
|
|
}
|
|
|
|
func testModelIdentifierLegacyModel() {
|
|
let model = CustomerOrder(id: "123-456", orderId: "order-id", email: "hello@abc.com")
|
|
XCTAssertEqual(model.identifier, "\"\(model.orderId)\"#\"\(model.id)\"")
|
|
}
|
|
|
|
// MARK: - ModelIdentifier predicate
|
|
|
|
func testModelIdentifierDefaultIdPredicate() {
|
|
let model = Post(title: "title", content: "", createdAt: Temporal.DateTime.now())
|
|
|
|
let predicate = (model.identifier(schema: Post.schema).predicate as? QueryPredicateOperation)!
|
|
|
|
XCTAssertEqual(predicate, Post.keys.id == model.id)
|
|
}
|
|
|
|
func testModelIdentifierImplicitDefaultPredicate() {
|
|
let model = ModelImplicitDefaultPk(name: "name")
|
|
|
|
let identifier = model.identifier(schema: ModelImplicitDefaultPk.schema)
|
|
|
|
let predicate = (identifier.predicate as? QueryPredicateOperation)!
|
|
|
|
XCTAssertEqual(predicate, ModelImplicitDefaultPk.keys.id == model.id)
|
|
}
|
|
|
|
func testModelIdentifierExplicitIdPredicate() {
|
|
let model = ModelExplicitDefaultPk(name: "name")
|
|
|
|
let identifier = model.identifier(schema: ModelExplicitDefaultPk.schema)
|
|
|
|
let predicate = (identifier.predicate as? QueryPredicateOperation)!
|
|
|
|
XCTAssertEqual(predicate, ModelExplicitDefaultPk.keys.id == model.id)
|
|
}
|
|
|
|
func testModelIdentifierCustomFieldPredicate() {
|
|
let model = ModelExplicitCustomPk(userId: "userId")
|
|
|
|
let identifier = model.identifier(schema: ModelExplicitCustomPk.schema)
|
|
|
|
let predicate = (identifier.predicate as? QueryPredicateOperation)!
|
|
|
|
XCTAssertEqual(predicate, ModelExplicitCustomPk.keys.userId == model.userId)
|
|
|
|
}
|
|
|
|
func testModelIdentifierCompositePredicate() {
|
|
let model = ModelCompositePk(id: "id",
|
|
dob: Temporal.DateTime.now(),
|
|
name: "name")
|
|
|
|
let identifier = model.identifier(schema: ModelCompositePk.schema)
|
|
|
|
let predicate = (identifier.predicate as? QueryPredicateGroup)!
|
|
|
|
let keys = ModelCompositePk.keys
|
|
|
|
let expectedPredicate = keys.dob == model.dob && keys.id == model.id
|
|
|
|
XCTAssertEqual(predicate.type, expectedPredicate.type)
|
|
XCTAssertEqual(predicate.predicates.count, expectedPredicate.predicates.count)
|
|
XCTAssertEqual(predicate, expectedPredicate)
|
|
|
|
}
|
|
}
|