describe Import do
before do
- @t = '{"a": 1, "b": "Z"}'
+ @t = '{"1": {"a": 1, "b": "Z"}}'
@j = JSON.parse @t
- @ts = '[{"a": 1, "b": "Z"}, {"a": 2, "b": "Z"}]'
+ @ts = '{"1": {"a": 1, "b": "Z"}, "2": {"a": 2, "b": "Z"}}'
@js = JSON.parse @ts
- @tes = '[{"a": 0}, {"a": 0}, {"a": 2, "b": "Z"}]'
+ @tes = '{"1": {"a": 0}, "2": {"a": 0}, "3": {"a": 2, "b": "Z"}}'
@jes = JSON.parse @tes
@f = File.expand_path(File.dirname(__FILE__) + '/import.json')
end
context '単体データを渡されたとき' do
it '一回処理' do
r = []
- Import.each_import @j do |i|
+ Import.each_import @j do |n, i|
r << i
end
r.size.should eq 1
end
+ it '一回処理' do
+ r = []
+ Import.each_import @j do |n, i|
+ r << n
+ end
+ r.first.should eq "1"
+ end
+ it '一回処理' do
+ r = []
+ Import.each_import @j do |n, i|
+ r << i
+ end
+ r.first["a"].should eq 1
+ r.first["b"].should eq "Z"
+ end
end
context '複数を渡されたとき' do
it '二回処理' do
r = []
- Import.each_import @js do |i|
+ Import.each_import @js do |n, i|
r << i
end
r.size.should eq 2
it 'Json解析を依頼する' do
JSON.should_receive(:parse_no_except).with(any_args).exactly(1)
JSON.stub(:parse_no_except).with(any_args).and_return(@j)
- Import.import(@t) {|attr| Import.new(attr)}
+ Import.import(@t) {|name, attr| Import.new(attr)}
end
it '繰り返し処理を依頼する' do
JSON.stub(:parse_no_except).with(any_args).and_return(@j)
Import.should_receive(:each_import).with(any_args).exactly(1)
- Import.import(@t) {|attr| Import.new(attr)}
+ Import.import(@t) {|name, attr| Import.new(attr)}
end
it '更新を一回依頼する' do
JSON.stub(:parse_no_except).with(any_args).and_return(@j)
Import.any_instance.stub(:valid?).with(any_args).and_return(true)
#newでスタブを作るとインスタンス生成ができないので、テスト用スタブで
Import.should_receive(:etest).with(any_args).exactly(1)
- Import.import(@t) {|attr| Import.etest ; Import.new(attr) }
+ Import.import(@t) {|name, attr| Import.etest ; Import.new(attr) }
end
it '[]を返す' do
JSON.stub(:parse_no_except).with(any_args).and_return(@j)
Import.any_instance.stub(:valid?).with(any_args).and_return(true)
- Import.import(@t) {|attr| Import.new(attr)}.should eq []
+ Import.import(@t) {|name, attr| Import.new(attr)}.should eq []
end
end
context '複数データがつつがなく終わるとき' do
Import.any_instance.stub(:valid?).with(any_args).and_return(true)
#newでスタブを作るとインスタンス生成ができないので、テスト用スタブで
Import.should_receive(:etest).with(any_args).exactly(2)
- Import.import(@ts) {|attr| Import.etest ; Import.new(attr)}.should eq []
+ Import.import(@ts) {|name, attr| Import.etest ; Import.new(attr)}.should eq []
end
it '[]を返す' do
- Import.import(@ts) {|attr| Import.new(attr)}.should eq []
+ Import.import(@ts) {|name, attr| Import.new(attr)}.should eq []
end
end
#例外ケース
JSON.stub(:parse_no_except).with(any_args).and_return(false)
end
it 'Falseを返す' do
- Import.import(@t){|attr| Import.new(attr)}.should be_false
+ Import.import(@t){|name, attr| Import.new(attr)}.should be_false
end
end
context '作成に失敗したとき' do
Import.any_instance.stub(:valid?).with(any_args).and_return(false)
end
it '配列を返す' do
- r = Import.import(@t){|attr| Import.new(attr)}
+ r = Import.import(@t){|name, attr| Import.new(attr)}
r.is_a?(Array).should be_true
end
it '配列の中身は一件' do
- r = Import.import(@t){|attr| Import.new(attr)}
+ r = Import.import(@t){|name, attr| Import.new(attr)}
r.should have(1).items
end
it 'オブジェクトが入っている' do
- r = Import.import(@t){|attr| Import.new(attr)}
+ r = Import.import(@t){|name, attr| Import.new(attr)}
r.first.is_a?(Import).should be_true
end
end
context '複数の作成に失敗したとき' do
#三件中、二件の失敗、一件を成功させ、成功データは戻り値に含まないことを確認する
it '途中で保存に失敗しても全件更新依頼する' do
- Import.import(@tes){|attr| Import.create(attr)}
+ Import.import(@tes){|name, attr| Import.create(attr)}
end
it '配列を返す' do
- r = Import.import(@tes){|attr| Import.create(attr)}
+ r = Import.import(@tes){|name, attr| Import.create(attr)}
r.is_a?(Array).should be_true
end
it '配列の中身は2件' do
- r = Import.import(@tes){|attr| Import.create(attr)}
+ r = Import.import(@tes){|name, attr| Import.create(attr)}
r.should have(2).items
end
it '配列の中身は失敗したオブジェクトが入っている' do
- r = Import.import(@tes){|attr| Import.create(attr)}
+ r = Import.import(@tes){|name, attr| Import.create(attr)}
r[0].is_a?(Import).should be_true
r[0]["a"].should eq 0
r[1].is_a?(Import).should be_true