Skip to content

Commit c2fd23f

Browse files
committed
Make FetchAppSettingsResponse compliant with Equatable.
1 parent 344ef04 commit c2fd23f

File tree

5 files changed

+81
-48
lines changed

5 files changed

+81
-48
lines changed

Sources/KintoneAPI/Codable/NumberPrecision.swift

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// Created by ky0me22 on 2025/01/31.
66
//
77

8-
public struct NumberPrecision: Codable, Sendable {
8+
public struct NumberPrecision: Codable, Sendable, Equatable {
99
public var digits: Int
1010
public var decimalPlaces: Int
1111
public var roundingMode: RoundingMode
@@ -29,4 +29,10 @@ public struct NumberPrecision: Codable, Sendable {
2929
try container.encode(decimalPlaces.description, forKey: .decimalPlaces)
3030
try container.encode(roundingMode, forKey: .roundingMode)
3131
}
32+
33+
init(digits: Int, decimalPlaces: Int, roundingMode: RoundingMode) {
34+
self.digits = digits
35+
self.decimalPlaces = decimalPlaces
36+
self.roundingMode = roundingMode
37+
}
3238
}

Sources/KintoneAPI/Decodable/AppSettings/AppIcon+Read.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77

88
extension AppIcon {
9-
public enum Read: Decodable, Sendable {
9+
public enum Read: Decodable, Sendable, Equatable {
1010
case preset(String)
1111
case file(File.Read)
1212

Sources/KintoneAPI/Decodable/AppSettings/TitleField.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
// Created by ky0me22 on 2025/02/04.
66
//
77

8-
public struct TitleField: Decodable, Sendable {
8+
public struct TitleField: Decodable, Sendable, Equatable {
99
public var selectionMode: TitleFieldSelectionMode
1010
public var code: String
11+
12+
init(selectionMode: TitleFieldSelectionMode, code: String) {
13+
self.selectionMode = selectionMode
14+
self.code = code
15+
}
1116
}

Sources/KintoneAPI/Decodable/FetchAppSettingsResponse.swift

+17-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// Created by ky0me22 on 2025/01/31.
66
//
77

8-
public struct FetchAppSettingsResponse: Decodable, Sendable {
8+
public struct FetchAppSettingsResponse: Decodable, Sendable, Equatable {
99
public var name: String
1010
public var description: String
1111
public var icon: AppIcon.Read
@@ -52,4 +52,20 @@ public struct FetchAppSettingsResponse: Decodable, Sendable {
5252
firstMonthOfFiscalYear = try container.customDecode(String.self, forKey: .firstMonthOfFiscalYear) { Int($0) }
5353
revision = try container.customDecode(String.self, forKey: .revision) { Int($0) }
5454
}
55+
56+
init(name: String, description: String, icon: AppIcon.Read, theme: AppThemeType, titleField: TitleField, enableThumbnails: Bool, enableBulkDeletion: Bool, enableComments: Bool, enableDuplicateRecord: Bool, enableInlineRecordEditing: Bool, numberPrecision: NumberPrecision, firstMonthOfFiscalYear: Int, revision: Int) {
57+
self.name = name
58+
self.description = description
59+
self.icon = icon
60+
self.theme = theme
61+
self.titleField = titleField
62+
self.enableThumbnails = enableThumbnails
63+
self.enableBulkDeletion = enableBulkDeletion
64+
self.enableComments = enableComments
65+
self.enableDuplicateRecord = enableDuplicateRecord
66+
self.enableInlineRecordEditing = enableInlineRecordEditing
67+
self.numberPrecision = numberPrecision
68+
self.firstMonthOfFiscalYear = firstMonthOfFiscalYear
69+
self.revision = revision
70+
}
5571
}

Tests/KintoneAPITests/DecodableTests/FetchAppSettingsResponseTests.swift

+50-44
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,28 @@ struct FetchAppSettingsResponseTests {
3535
"""
3636
let data = try #require(input.data(using: .utf8))
3737
let actual = try JSONDecoder().decode(FetchAppSettingsResponse.self, from: data)
38-
#expect(actual.name == "dummy")
39-
#expect(actual.description == "dummy")
40-
if case let .preset(key) = actual.icon {
41-
#expect(key == "APP39")
42-
} else {
43-
Issue.record("icon must be preset type.")
44-
}
45-
#expect(actual.theme == .white)
46-
#expect(actual.titleField.selectionMode == .automatic)
47-
#expect(actual.titleField.code == "dummy")
48-
#expect(actual.enableThumbnails)
49-
#expect(actual.enableBulkDeletion)
50-
#expect(actual.enableComments)
51-
#expect(actual.enableDuplicateRecord)
52-
#expect(actual.enableInlineRecordEditing)
53-
#expect(actual.numberPrecision.digits == 16)
54-
#expect(actual.numberPrecision.decimalPlaces == 4)
55-
#expect(actual.numberPrecision.roundingMode == .halfEven)
56-
#expect(actual.firstMonthOfFiscalYear == 1)
57-
#expect(actual.revision == 1)
38+
#expect(actual == .init(
39+
name: "dummy",
40+
description: "dummy",
41+
icon: .preset("APP39"),
42+
theme: .white,
43+
titleField: .init(
44+
selectionMode: .automatic,
45+
code: "dummy"
46+
),
47+
enableThumbnails: true,
48+
enableBulkDeletion: true,
49+
enableComments: true,
50+
enableDuplicateRecord: true,
51+
enableInlineRecordEditing: true,
52+
numberPrecision: .init(
53+
digits: 16,
54+
decimalPlaces: 4,
55+
roundingMode: .halfEven
56+
),
57+
firstMonthOfFiscalYear: 1,
58+
revision: 1
59+
))
5860
}
5961

6062
@Test
@@ -67,8 +69,8 @@ struct FetchAppSettingsResponseTests {
6769
"type" : "FILE",
6870
"file" : {
6971
"fileKey" : "dummy",
70-
"name" : "dummy.png",
7172
"contentType" : "image/png",
73+
"name" : "dummy.png",
7274
"size" : "10000"
7375
}
7476
},
@@ -93,28 +95,32 @@ struct FetchAppSettingsResponseTests {
9395
"""
9496
let data = try #require(input.data(using: .utf8))
9597
let actual = try JSONDecoder().decode(FetchAppSettingsResponse.self, from: data)
96-
#expect(actual.name == "dummy")
97-
#expect(actual.description == "dummy")
98-
if case let .file(file) = actual.icon {
99-
#expect(file.fileKey == "dummy")
100-
#expect(file.fileName == "dummy.png")
101-
#expect(file.mimeType == "image/png")
102-
#expect(file.fileSize == "10000")
103-
} else {
104-
Issue.record("icon must be file type.")
105-
}
106-
#expect(actual.theme == .black)
107-
#expect(actual.titleField.selectionMode == .manual)
108-
#expect(actual.titleField.code == "dummy")
109-
#expect(actual.enableThumbnails == false)
110-
#expect(actual.enableBulkDeletion == false)
111-
#expect(actual.enableComments == false)
112-
#expect(actual.enableDuplicateRecord == false)
113-
#expect(actual.enableInlineRecordEditing == false)
114-
#expect(actual.numberPrecision.digits == 16)
115-
#expect(actual.numberPrecision.decimalPlaces == 4)
116-
#expect(actual.numberPrecision.roundingMode == .up)
117-
#expect(actual.firstMonthOfFiscalYear == 1)
118-
#expect(actual.revision == 1)
98+
#expect(actual == .init(
99+
name: "dummy",
100+
description: "dummy",
101+
icon: .file(.init(
102+
fileKey: "dummy",
103+
mimeType: "image/png",
104+
fileName: "dummy.png",
105+
fileSize: "10000"
106+
)),
107+
theme: .black,
108+
titleField: .init(
109+
selectionMode: .manual,
110+
code: "dummy"
111+
),
112+
enableThumbnails: false,
113+
enableBulkDeletion: false,
114+
enableComments: false,
115+
enableDuplicateRecord: false,
116+
enableInlineRecordEditing: false,
117+
numberPrecision: .init(
118+
digits: 16,
119+
decimalPlaces: 4,
120+
roundingMode: .up
121+
),
122+
firstMonthOfFiscalYear: 1,
123+
revision: 1
124+
))
119125
}
120126
}

0 commit comments

Comments
 (0)