Skip to content

Commit

Permalink
fix: Updating test mock set method definitions (#3089)
Browse files Browse the repository at this point in the history
  • Loading branch information
BobaFetters authored Jun 23, 2023
1 parent 0531744 commit 03baa31
Show file tree
Hide file tree
Showing 16 changed files with 217 additions and 163 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@ public extension Mock where O == Bird {
wingspan: Double? = nil
) {
self.init()
_set(bodyTemperature, for: \.bodyTemperature)
_set(favoriteToy, for: \.favoriteToy)
_set(height, for: \.height)
_set(humanName, for: \.humanName)
_set(id, for: \.id)
_set(laysEggs, for: \.laysEggs)
_set(owner, for: \.owner)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_set(wingspan, for: \.wingspan)
_setScalar(bodyTemperature, for: \.bodyTemperature)
_setScalar(favoriteToy, for: \.favoriteToy)
_setEntity(height, for: \.height)
_setScalar(humanName, for: \.humanName)
_setScalar(id, for: \.id)
_setScalar(laysEggs, for: \.laysEggs)
_setEntity(owner, for: \.owner)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
_setScalar(wingspan, for: \.wingspan)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@ public extension Mock where O == Cat {
species: String? = nil
) {
self.init()
_set(bodyTemperature, for: \.bodyTemperature)
_set(favoriteToy, for: \.favoriteToy)
_set(height, for: \.height)
_set(humanName, for: \.humanName)
_set(id, for: \.id)
_set(isJellicle, for: \.isJellicle)
_set(laysEggs, for: \.laysEggs)
_set(owner, for: \.owner)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_setScalar(bodyTemperature, for: \.bodyTemperature)
_setScalar(favoriteToy, for: \.favoriteToy)
_setEntity(height, for: \.height)
_setScalar(humanName, for: \.humanName)
_setScalar(id, for: \.id)
_setScalar(isJellicle, for: \.isJellicle)
_setScalar(laysEggs, for: \.laysEggs)
_setEntity(owner, for: \.owner)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ public extension Mock where O == Crocodile {
species: String? = nil
) {
self.init()
_set(height, for: \.height)
_set(id, for: \.id)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_setEntity(height, for: \.height)
_setScalar(id, for: \.id)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@ public extension Mock where O == Dog {
species: String? = nil
) {
self.init()
_set(birthdate, for: \.birthdate)
_set(bodyTemperature, for: \.bodyTemperature)
_set(favoriteToy, for: \.favoriteToy)
_set(height, for: \.height)
_set(humanName, for: \.humanName)
_set(id, for: \.id)
_set(laysEggs, for: \.laysEggs)
_set(owner, for: \.owner)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_setScalar(birthdate, for: \.birthdate)
_setScalar(bodyTemperature, for: \.bodyTemperature)
_setScalar(favoriteToy, for: \.favoriteToy)
_setEntity(height, for: \.height)
_setScalar(humanName, for: \.humanName)
_setScalar(id, for: \.id)
_setScalar(laysEggs, for: \.laysEggs)
_setEntity(owner, for: \.owner)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ public extension Mock where O == Fish {
species: String? = nil
) {
self.init()
_set(favoriteToy, for: \.favoriteToy)
_set(height, for: \.height)
_set(humanName, for: \.humanName)
_set(id, for: \.id)
_set(owner, for: \.owner)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_setScalar(favoriteToy, for: \.favoriteToy)
_setEntity(height, for: \.height)
_setScalar(humanName, for: \.humanName)
_setScalar(id, for: \.id)
_setEntity(owner, for: \.owner)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ public extension Mock where O == Height {
relativeSize: GraphQLEnum<AnimalKingdomAPI.RelativeSize>? = nil
) {
self.init()
_set(centimeters, for: \.centimeters)
_set(feet, for: \.feet)
_set(inches, for: \.inches)
_set(meters, for: \.meters)
_set(relativeSize, for: \.relativeSize)
_setScalar(centimeters, for: \.centimeters)
_setScalar(feet, for: \.feet)
_setScalar(inches, for: \.inches)
_setScalar(meters, for: \.meters)
_setScalar(relativeSize, for: \.relativeSize)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ public extension Mock where O == Human {
species: String? = nil
) {
self.init()
_set(bodyTemperature, for: \.bodyTemperature)
_set(firstName, for: \.firstName)
_set(height, for: \.height)
_set(id, for: \.id)
_set(laysEggs, for: \.laysEggs)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_setScalar(bodyTemperature, for: \.bodyTemperature)
_setScalar(firstName, for: \.firstName)
_setEntity(height, for: \.height)
_setScalar(id, for: \.id)
_setScalar(laysEggs, for: \.laysEggs)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ public extension Mock where O == Mutation {
adoptPet: AnyMock? = nil
) {
self.init()
_set(adoptPet, for: \.adoptPet)
_setEntity(adoptPet, for: \.adoptPet)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ public extension Mock where O == PetRock {
owner: Mock<Human>? = nil
) {
self.init()
_set(favoriteToy, for: \.favoriteToy)
_set(humanName, for: \.humanName)
_set(id, for: \.id)
_set(owner, for: \.owner)
_setScalar(favoriteToy, for: \.favoriteToy)
_setScalar(humanName, for: \.humanName)
_setScalar(id, for: \.id)
_setEntity(owner, for: \.owner)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ public extension Mock where O == Query {
pets: [AnyMock]? = nil
) {
self.init()
_set(allAnimals, for: \.allAnimals)
_set(classroomPets, for: \.classroomPets)
_set(pets, for: \.pets)
_setList(allAnimals, for: \.allAnimals)
_setList(classroomPets, for: \.classroomPets)
_setList(pets, for: \.pets)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ public extension Mock where O == Rat {
species: String? = nil
) {
self.init()
_set(favoriteToy, for: \.favoriteToy)
_set(height, for: \.height)
_set(humanName, for: \.humanName)
_set(id, for: \.id)
_set(owner, for: \.owner)
_set(predators, for: \.predators)
_set(skinCovering, for: \.skinCovering)
_set(species, for: \.species)
_setScalar(favoriteToy, for: \.favoriteToy)
_setEntity(height, for: \.height)
_setScalar(humanName, for: \.humanName)
_setScalar(id, for: \.id)
_setEntity(owner, for: \.owner)
_setList(predators, for: \.predators)
_setScalar(skinCovering, for: \.skinCovering)
_setScalar(species, for: \.species)
}
}
29 changes: 23 additions & 6 deletions Sources/ApolloCodegenLib/Templates/MockObjectTemplate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ struct MockObjectTemplate: TemplateRenderer {
responseKey: String,
propertyName: String,
initializerParameterName: String?,
type: String,
type: GraphQLType,
mockType: String,
deprecationReason: String?
)
Expand All @@ -24,14 +24,14 @@ struct MockObjectTemplate: TemplateRenderer {
let fields: [TemplateField] = ir.fieldCollector
.collectedFields(for: graphqlObject)
.map {
(
(
responseKey: $0.0,
propertyName: $0.0.asTestMockFieldPropertyName,
initializerParameterName: $0.0.asTestMockInitializerParameterName,
type: $0.1.rendered(as: .testMockField(forceNonNull: true), config: config.config),
type: $0.1,
mockType: mockTypeName(for: $0.1),
deprecationReason: $0.deprecationReason
)
)
}

let memberAccessControl = accessControlModifier(for: .member)
Expand All @@ -46,7 +46,7 @@ struct MockObjectTemplate: TemplateRenderer {
\(fields.map {
TemplateString("""
\(deprecationReason: $0.deprecationReason, config: config)
@Field<\($0.type)>("\($0.responseKey)") public var \($0.propertyName)
@Field<\($0.type.rendered(as: .testMockField(forceNonNull: true), config: config.config))>("\($0.responseKey)") public var \($0.propertyName)
""")
}, separator: "\n")
}
Expand All @@ -63,14 +63,31 @@ struct MockObjectTemplate: TemplateRenderer {
""" }, separator: ",\n")
) {
self.init()
\(fields.map { "_set(\($0.initializerParameterName ?? $0.propertyName), for: \\.\($0.propertyName))" }, separator: "\n")
\(fields.map {
return "_set\(mockFunctionDescriptor($0.type))(\($0.initializerParameterName ?? $0.propertyName), for: \\.\($0.propertyName))"
}, separator: "\n")
}
}
""") : TemplateString(stringLiteral: "")
)
"""
}

private func mockFunctionDescriptor(_ graphQLType: GraphQLType) -> String {
switch graphQLType {
case .list(_):
return "List"
case .scalar(_), .enum(_):
return "Scalar"
case .entity(_):
return "Entity"
case .inputObject(_):
preconditionFailure("Input object found when determing mock set function descriptor.")
case .nonNull(let type):
return mockFunctionDescriptor(type)
}
}

private func conflictingFieldNameProperties(_ fields: [TemplateField]) -> TemplateString {
"""
Expand Down
13 changes: 6 additions & 7 deletions Sources/ApolloTestSupport/TestMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public class Mock<O: MockObject>: AnyMock, Hashable {
return _data[field.key.description] as? T
}
set {
_set(newValue, for: keyPath)
_setScalar(newValue, for: keyPath)
}
}

public func _set<T: AnyScalarType & Hashable>(
public func _setScalar<T: AnyScalarType & Hashable>(
_ value: T?,
for keyPath: KeyPath<O.MockFields, Field<T>>
) {
Expand All @@ -43,11 +43,11 @@ public class Mock<O: MockObject>: AnyMock, Hashable {
return _data[field.key.description] as? T.MockValueCollectionType.Element
}
set {
_set(newValue, for: keyPath)
_setEntity(newValue, for: keyPath)
}
}

public func _set<T: MockFieldValue>(
public func _setEntity<T: MockFieldValue>(
_ value: T.MockValueCollectionType.Element?,
for keyPath: KeyPath<O.MockFields, Field<T>>
) {
Expand All @@ -63,12 +63,11 @@ public class Mock<O: MockObject>: AnyMock, Hashable {
return _data[field.key.description] as? [T.MockValueCollectionType.Element]
}
set {
_set(newValue, for: keyPath)
_setList(newValue, for: keyPath)
}
}

@_disfavoredOverload
public func _set<T: MockFieldValue>(
public func _setList<T: MockFieldValue>(
_ value: [T.MockValueCollectionType.Element]?,
for keyPath: KeyPath<O.MockFields, Field<Array<T>>>
) {
Expand Down
Loading

0 comments on commit 03baa31

Please sign in to comment.