diff --git a/Sources/ApolloCodegenLib/Templates/MockObjectTemplate.swift b/Sources/ApolloCodegenLib/Templates/MockObjectTemplate.swift index bc60943242..c35f1ddd0e 100644 --- a/Sources/ApolloCodegenLib/Templates/MockObjectTemplate.swift +++ b/Sources/ApolloCodegenLib/Templates/MockObjectTemplate.swift @@ -49,17 +49,21 @@ struct MockObjectTemplate: TemplateRenderer { }, separator: "\n") } } - - public extension Mock where O == \(objectName) { - convenience init( - \(fields.map { """ - \($0.propertyName)\(ifLet: $0.initializerParameterName, {" \($0)"}): \($0.mockType)? = nil - """ }, separator: ",\n") - ) { - self.init() - \(fields.map { "self.\($0.propertyName) = \($0.initializerParameterName ?? $0.propertyName)" }, separator: "\n") + \(!fields.isEmpty ? + TemplateString(""" + + public extension Mock where O == \(objectName) { + convenience init( + \(fields.map { """ + \($0.propertyName)\(ifLet: $0.initializerParameterName, {" \($0)"}): \($0.mockType)? = nil + """ }, separator: ",\n") + ) { + self.init() + \(fields.map { "self.\($0.propertyName) = \($0.initializerParameterName ?? $0.propertyName)" }, separator: "\n") + } } - } + """) : TemplateString(stringLiteral: "") + ) """ } diff --git a/Tests/ApolloCodegenTests/CodeGeneration/Templates/MockObjectTemplateTests.swift b/Tests/ApolloCodegenTests/CodeGeneration/Templates/MockObjectTemplateTests.swift index f3809edaa0..368bc87b58 100644 --- a/Tests/ApolloCodegenTests/CodeGeneration/Templates/MockObjectTemplateTests.swift +++ b/Tests/ApolloCodegenTests/CodeGeneration/Templates/MockObjectTemplateTests.swift @@ -527,6 +527,25 @@ class MockObjectTemplateTests: XCTestCase { ignoringExtraLines: false) ) } + + func test_render_givenSchemaTypeWithoutFields_doesNotgenerateConvenienceInitializer() { + // given + buildSubject(moduleType: .swiftPackageManager) + + let expected = """ + } + + """ + // when + let actual = renderSubject() + + // then + expect(actual).to(equalLineByLine( + expected, + atLine: 8 + self.subject.graphqlObject.fields.count, + ignoringExtraLines: false) + ) + } func test_render_givenFieldsWithSwiftReservedKeyworkNames_generatesConvenienceInitializerParamatersEscapedWithBackticksAndInternalNames() { // given