|
224 | 224 | expect(multi_branch_row["道場数"]).to eq("3")
|
225 | 225 | end
|
226 | 226 |
|
227 |
| - it "calculates counter_sum correctly for CSV" do |
| 227 | + it "includes counter field in CSV data rows" do |
228 | 228 | get dojos_path(format: :csv)
|
229 | 229 |
|
230 |
| - expected_sum = [@dojo_2020_active, @dojo_2020_inactive, @dojo_2021_active, |
231 |
| - @dojo_2019_inactive, @dojo_multi_branch].sum(&:counter) |
232 |
| - # @counter_sum はCSVで使用されるので、CSVリクエスト時に検証 |
233 |
| - csv = CSV.parse(response.body) |
234 |
| - last_line = csv.last |
235 |
| - expect(last_line[2]).to eq(expected_sum.to_s) |
| 230 | + csv = CSV.parse(response.body, headers: true) |
| 231 | + # 各道場のcounter値が正しく含まれることを確認 |
| 232 | + multi_branch_row = csv.find { |row| row["ID"] == @dojo_multi_branch.id.to_s } |
| 233 | + expect(multi_branch_row["道場数"]).to eq("3") |
| 234 | + |
| 235 | + normal_dojo_row = csv.find { |row| row["ID"] == @dojo_2020_active.id.to_s } |
| 236 | + expect(normal_dojo_row["道場数"]).to eq("1") |
236 | 237 | end
|
237 | 238 |
|
238 |
| - it "calculates counter_sum for filtered year in CSV" do |
| 239 | + it "filters counter values correctly for specific year" do |
239 | 240 | get dojos_path(year: 2020, format: :csv)
|
240 | 241 |
|
241 |
| - # 2020年末時点でアクティブな道場のcounter合計 |
242 |
| - active_in_2020 = [@dojo_2020_active, @dojo_2020_inactive, @dojo_multi_branch] |
243 |
| - expected_sum = active_in_2020.sum(&:counter) |
244 |
| - csv = CSV.parse(response.body) |
245 |
| - last_line = csv.last |
246 |
| - expect(last_line[2]).to eq(expected_sum.to_s) |
| 242 | + csv = CSV.parse(response.body, headers: true) |
| 243 | + # 2020年末時点でアクティブな道場のみが含まれることを確認 |
| 244 | + dojo_ids = csv.map { |row| row["ID"].to_i } |
| 245 | + expect(dojo_ids).to include(@dojo_2020_active.id) |
| 246 | + expect(dojo_ids).to include(@dojo_2020_inactive.id) # 2021年に非アクティブ化されたので2020年末時点ではアクティブ |
| 247 | + expect(dojo_ids).to include(@dojo_multi_branch.id) |
| 248 | + expect(dojo_ids).not_to include(@dojo_2021_active.id) # 2021年作成なので含まれない |
247 | 249 | end
|
248 | 250 | end
|
249 | 251 |
|
|
252 | 254 | get dojos_path(format: :csv)
|
253 | 255 | csv = CSV.parse(response.body, headers: true)
|
254 | 256 |
|
255 |
| - expect(csv.headers).to eq(['ID', '道場名', '道場数', '都道府県', 'URL', '設立日', '状態']) |
| 257 | + # 全期間の場合は閉鎖日カラムが追加される |
| 258 | + expect(csv.headers).to eq(['ID', '道場名', '道場数', '都道府県', 'URL', '設立日', '状態', '閉鎖日']) |
256 | 259 | end
|
257 | 260 |
|
258 |
| - it "includes total row at the end" do |
| 261 | + it "does not include total row for better data consistency" do |
259 | 262 | get dojos_path(format: :csv)
|
260 |
| - lines = response.body.split("\n") |
| 263 | + csv = CSV.parse(response.body) |
| 264 | + |
| 265 | + # 合計行が含まれないことを確認(データ一貫性のため) |
| 266 | + csv.each do |row| |
| 267 | + # IDカラムに「合計」という文字列が含まれないことを確認 |
| 268 | + expect(row[0]).not_to eq("合計") if row[0] |
| 269 | + end |
261 | 270 |
|
262 |
| - # 最後の行が合計行 |
263 |
| - last_line = lines.last |
264 |
| - expect(last_line).to include("合計") |
265 |
| - expect(last_line).to include("道場") |
| 271 | + # 全ての行がデータ行またはヘッダー行であることを確認 |
| 272 | + expect(csv.all? { |row| row.compact.any? }).to be true |
266 | 273 | end
|
267 | 274 |
|
268 | 275 | it "formats dates correctly" do
|
|
0 commit comments