Skip to content

Commit

Permalink
changed spec format
Browse files Browse the repository at this point in the history
  • Loading branch information
taichi-ishitani committed Apr 13, 2020
1 parent fbea095 commit 4a1bf38
Show file tree
Hide file tree
Showing 4 changed files with 184 additions and 200 deletions.
80 changes: 38 additions & 42 deletions spec/rggen/spreadsheet_loader/spreadsheet/book_spec.rb
Original file line number Diff line number Diff line change
@@ -1,60 +1,56 @@
# frozen_string_literal: true

require 'spec_helper'
RSpec.describe RgGen::SpreadsheetLoader::Spreadsheet::Book do
let(:book) { described_class.new(file) }

module RgGen::SpreadsheetLoader::Spreadsheet
describe Book do
let(:book) { Book.new(file) }
let(:file) { 'foo.xlsx' }

let(:file) { 'foo.xlsx' }

describe '#add_sheet' do
let(:tables) do
[create_table(3, 3), create_table(3, 4)]
end
describe '#add_sheet' do
let(:tables) do
[create_table(3, 3), create_table(3, 4)]
end

def create_table(row_size, column_size)
Array.new(row_size) do |row|
Array.new(column_size) { |column| cell_value(row, column, column_size) }
end
def create_table(row_size, column_size)
Array.new(row_size) do |row|
Array.new(column_size) { |column| cell_value(row, column, column_size) }
end
end

def cell_value(row, column, column_size)
[(column_size * row + column), 'foo', :foo, nil].sample
end
def cell_value(row, column, column_size)
[(column_size * row + column), 'foo', :foo, nil].sample
end

def flat_table(table)
table.flat_map.with_index do |row, row_index|
row.map.with_index do |value, column_index|
[row_index, column_index, value]
end
def flat_table(table)
table.flat_map.with_index do |row, row_index|
row.map.with_index do |value, column_index|
[row_index, column_index, value]
end
end
end

def match_cell(value, sheet, row, column)
position = Position.new(file, sheet, row, column)
if value.nil?
be_empty_cell(position)
else
match_value(value, position)
end
def match_cell(value, sheet, row, column)
position = RgGen::SpreadsheetLoader::Spreadsheet::Position.new(file, sheet, row, column)
if value.nil?
be_empty_cell(position)
else
match_value(value, position)
end
end

it '与えられたシート名、テーブルでシートを追加する' do
book.add_sheet('sheet_0', tables[0])
book.add_sheet('sheet_1', tables[1])
it '与えられたシート名、テーブルでシートを追加する' do
book.add_sheet('sheet_0', tables[0])
book.add_sheet('sheet_1', tables[1])

sheet = book.sheets[0]
expect(sheet).to have_attributes(file: file, sheet: 'sheet_0')
flat_table(tables[0]).each do |row, column, value|
expect(sheet[row, column]).to match_cell(value, 'sheet_0', row, column)
end
sheet = book.sheets[0]
expect(sheet).to have_attributes(file: file, sheet: 'sheet_0')
flat_table(tables[0]).each do |row, column, value|
expect(sheet[row, column]).to match_cell(value, 'sheet_0', row, column)
end

sheet = book.sheets[1]
expect(sheet).to have_attributes(file: file, sheet: 'sheet_1')
flat_table(tables[1]).each do |row, column, value|
expect(sheet[row, column]).to match_cell(value, 'sheet_1', row, column)
end
sheet = book.sheets[1]
expect(sheet).to have_attributes(file: file, sheet: 'sheet_1')
flat_table(tables[1]).each do |row, column, value|
expect(sheet[row, column]).to match_cell(value, 'sheet_1', row, column)
end
end
end
Expand Down
150 changes: 73 additions & 77 deletions spec/rggen/spreadsheet_loader/spreadsheet/row_spec.rb
Original file line number Diff line number Diff line change
@@ -1,112 +1,108 @@
# frozen_string_literal: true

require 'spec_helper'
RSpec.describe RgGen::SpreadsheetLoader::Spreadsheet::Row do
let(:row) { described_class.new(sheet, row_index) }

module RgGen::SpreadsheetLoader::Spreadsheet
describe Row do
let(:row) { Row.new(sheet, row_index) }
let(:file) { 'foo.xlsx' }

let(:file) { 'foo.xlsx' }
let(:sheet_name) { 'a sheet' }

let(:sheet_name) { 'a sheet' }

let(:sheet) do
double('sheet', file: file, sheet: sheet_name)
end
let(:sheet) do
double('sheet', file: file, sheet: sheet_name)
end

let(:row_index) { (0..10).to_a.sample }
let(:row_index) { (0..10).to_a.sample }

def cell_position(column_index)
Position.new(file, sheet_name, row_index, column_index)
end
def cell_position(column_index)
RgGen::SpreadsheetLoader::Spreadsheet::Position.new(file, sheet_name, row_index, column_index)
end

describe '#[]=' do
let(:values) { [1, 'foo', :foo, nil].shuffle }
describe '#[]=' do
let(:values) { [1, 'foo', :foo, nil].shuffle }

let(:column_indexes) { (0..10).to_a.sample(4) }
let(:column_indexes) { (0..10).to_a.sample(4) }

it '指定したカラムに、セルを追加する' do
row[column_indexes[0]] = values[0]
row[column_indexes[1]] = values[1]
row[column_indexes[2]] = values[2]
it '指定したカラムに、セルを追加する' do
row[column_indexes[0]] = values[0]
row[column_indexes[1]] = values[1]
row[column_indexes[2]] = values[2]

expect(row[column_indexes[0]]).to match_value(values[0], cell_position(column_indexes[0]))
expect(row[column_indexes[1]]).to match_value(values[1], cell_position(column_indexes[1]))
expect(row[column_indexes[2]]).to match_value(values[2], cell_position(column_indexes[2]))
end
expect(row[column_indexes[0]]).to match_value(values[0], cell_position(column_indexes[0]))
expect(row[column_indexes[1]]).to match_value(values[1], cell_position(column_indexes[1]))
expect(row[column_indexes[2]]).to match_value(values[2], cell_position(column_indexes[2]))
end
end

describe '#[]' do
context '値が設定されていないカラムを参照した場合' do
let(:column_index) { (0..10).to_a.sample }
describe '#[]' do
context '値が設定されていないカラムを参照した場合' do
let(:column_index) { (0..10).to_a.sample }

it '空のセルを返す' do
expect(row[column_index]).to be_empty_cell(cell_position(column_index))
end
it '空のセルを返す' do
expect(row[column_index]).to be_empty_cell(cell_position(column_index))
end
end
end

describe '#cells' do
let(:filled_columns) do
(0..9).to_a.sample(2).push(10)
end
describe '#cells' do
let(:filled_columns) do
(0..9).to_a.sample(2).push(10)
end

let(:values) do
filled_columns
.map { |column| [column, rand(99)] }
.to_h
end
let(:values) do
filled_columns
.map { |column| [column, rand(99)] }
.to_h
end

before do
values.each { |column, value| row[column] = value }
end
before do
values.each { |column, value| row[column] = value }
end

context '無引数の場合' do
it '行中のセルを返す' do
cells = row.cells
expect(cells.size).to eq 11
cells.each_with_index do |cell, column|
if filled_columns.include?(column)
expect(cell).to match_value(values[column], cell_position(column))
else
expect(cell).to be_empty_cell(cell_position(column))
end
context '無引数の場合' do
it '行中のセルを返す' do
cells = row.cells
expect(cells.size).to eq 11
cells.each_with_index do |cell, column|
if filled_columns.include?(column)
expect(cell).to match_value(values[column], cell_position(column))
else
expect(cell).to be_empty_cell(cell_position(column))
end
end
end
end

context '開始点が指定された場合' do
let(:from) { (0..10).to_a.sample }
context '開始点が指定された場合' do
let(:from) { (0..10).to_a.sample }

let(:length) { 11 - from }
let(:length) { 11 - from }

it '指定された開始点からのセルを返す' do
cells = row.cells(from)
expect(cells.size).to eq length
cells.each.with_index(from) do |cell, column|
if filled_columns.include?(column)
expect(cell).to match_value(values[column], cell_position(column))
else
expect(cell).to be_empty_cell(cell_position(column))
end
it '指定された開始点からのセルを返す' do
cells = row.cells(from)
expect(cells.size).to eq length
cells.each.with_index(from) do |cell, column|
if filled_columns.include?(column)
expect(cell).to match_value(values[column], cell_position(column))
else
expect(cell).to be_empty_cell(cell_position(column))
end
end
end
end

context '開始点と長さが指定された場合' do
let(:from) { (0..10).to_a.sample }
context '開始点と長さが指定された場合' do
let(:from) { (0..10).to_a.sample }

let(:length) { (1..(11 - from)).to_a.sample }
let(:length) { (1..(11 - from)).to_a.sample }

it '指定された開始点からのセルを、指定された長さ分返す' do
cells = row.cells(from, length)
expect(cells.size).to eq length
cells.each.with_index(from) do |cell, column|
if filled_columns.include?(column)
expect(cell).to match_value(values[column], cell_position(column))
else
expect(cell).to be_empty_cell(cell_position(column))
end
it '指定された開始点からのセルを、指定された長さ分返す' do
cells = row.cells(from, length)
expect(cells.size).to eq length
cells.each.with_index(from) do |cell, column|
if filled_columns.include?(column)
expect(cell).to match_value(values[column], cell_position(column))
else
expect(cell).to be_empty_cell(cell_position(column))
end
end
end
Expand Down

0 comments on commit 4a1bf38

Please sign in to comment.