Skip to content

Commit

Permalink
specs for comparing
Browse files Browse the repository at this point in the history
  • Loading branch information
Jon Stroop committed Jan 22, 2015
1 parent 6d37da7 commit 065b84b
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 15 deletions.
1 change: 1 addition & 0 deletions .rspec
@@ -1,2 +1,3 @@
--color
--require spec_helper
--format documentation
30 changes: 17 additions & 13 deletions lib/voyager_helpers/sync_fu.rb
Expand Up @@ -20,15 +20,17 @@ def bib_ids_to_file(file_handle, conn=nil)
end
end

def compare_id_dumps(earlier_file, later_file)
def compare_id_dumps(earlier_file, later_file, now=nil)
now = DateTime.now.new_offset(0) if now.nil?
diff = Diffy::Diff.new(earlier_file, later_file, source: 'files', context: 0)
diff_hashes = diff_to_hash_array(diff)
grouped_diffs = group_by_plusminus(diff_hashes)
id_set = bib_id_set_from_diff(diff)
grouped_diffs_to_cud_hash(grouped_diffs, id_set)
grouped_diffs_to_cud_hash(grouped_diffs, id_set, now)
end

private

def exec_bib_ids_to_file(query, file_handle, connection)
File.open(file_handle, 'w') do |f|
f.write("BIB_ID CREATE_DATE UPDATE_DATE\n")
Expand Down Expand Up @@ -70,25 +72,27 @@ def group_by_plusminus(diff_hashes)
groups
end

def grouped_diffs_to_cud_hash(grouped_diffs, id_set)
now = DateTime.now.new_offset(0)
def grouped_diffs_to_cud_hash(grouped_diffs, id_set, datetime)
hsh = { create: [], update: [], delete: [] }
id_set.each do |bib_id|
if grouped_diffs['-'].has_key?(bib_id) && grouped_diffs['+'].has_key?(bib_id)
h = { bib_id: bib_id, datetime: grouped_diffs['+'][bib_id][:updated] }
id_set.each do |id|
if grouped_diffs['-'].has_key?(id) && grouped_diffs['+'].has_key?(id)
h = { id: id, datetime: grouped_diffs['+'][id][:updated] }
hsh[:update] << h
elsif grouped_diffs['+'].has_key?(bib_id)
h = { bib_id: bib_id }
if grouped_diffs['+'][bib_id].has_key?(:updated)
h[:datetime] = grouped_diffs['+'][bib_id][:updated]
elsif grouped_diffs['+'].has_key?(id)
h = { id: id }
if grouped_diffs['+'][id].has_key?(:updated)
h[:datetime] = grouped_diffs['+'][id][:updated]
else
h[:datetime] = grouped_diffs['+'][bib_id][:created]
h[:datetime] = grouped_diffs['+'][id][:created]
end
hsh[:create] << h
else
hsh[:delete] << { bib_id: bib_id, datetime: now }
hsh[:delete] << { id: id, datetime: datetime }
end
end
hsh.keys.each do |k|
hsh[k] = hsh[k].sort_by { |h| h[:datetime] }
end
hsh
end

Expand Down
7 changes: 6 additions & 1 deletion spec/fixtures/earlier_id_dump.txt
@@ -1 +1,6 @@
x
1 2000-06-08T00:00:00-05:00 2012-05-21T11:40:38-05:00
2 2000-06-08T00:00:00-05:00 2010-06-16T15:55:32-05:00
3 2000-06-08T00:00:00-05:00
4 2000-06-08T00:00:00-05:00 2011-05-04T10:14:46-05:00
5 2000-06-08T00:00:00-05:00 2013-04-12T13:40:57-05:00
8 2000-06-08T00:00:00-05:00 2012-07-06T10:21:00-05:00
7 changes: 6 additions & 1 deletion spec/fixtures/later_id_dump.txt
@@ -1 +1,6 @@
y
1 2000-06-08T00:00:00-05:00 2012-06-21T11:40:38-05:00
3 2000-06-08T00:00:00-05:00
4 2000-06-08T00:00:00-05:00 2011-05-04T10:14:46-05:00
6 2000-06-08T00:00:00-05:00 2013-04-12T13:40:57-05:00
8 2000-06-08T00:00:00-05:00 2012-07-06T10:22:00-05:00
11 2000-06-08T00:00:00-05:00
49 changes: 49 additions & 0 deletions spec/unit/voyager_helpers/sync_fu_spec.rb
@@ -1,15 +1,64 @@
require 'date'

describe VoyagerHelpers::SyncFu do

let(:fixtures_dir) { File.join(File.dirname(__FILE__), '../../fixtures') }
let(:earlier_file) { File.join(fixtures_dir, 'earlier_id_dump.txt') }
let(:later_file) { File.join(fixtures_dir, 'later_id_dump.txt') }
let(:subject) { described_class }

describe '#compare_id_dumps' do

it 'sorts the entries as expected' do
now = DateTime.now.new_offset(0)
report = VoyagerHelpers::SyncFu.compare_id_dumps(earlier_file, later_file, now)
expected = {
create: [
{
id: '11',
datetime: DateTime.parse('2000-06-08T00:00:00-05:00').new_offset(0)
}, {
id: '6',
datetime: DateTime.parse('2013-04-12T13:40:57-05:0').new_offset(0)
}
],
update: [
{
id: '1',
datetime: DateTime.parse('2012-06-21T11:40:38-05:00').new_offset(0)
},
{
id: '8',
datetime: DateTime.parse('2012-07-06T10:22:00-05:00').new_offset(0)
}
],
delete: [
{ id: '2', datetime: now },
{ id: '5', datetime: now }
]
}
expect(report).to eq expected
end

it 'does not raise an error if we don\'t supply the time' do
expect {
VoyagerHelpers::SyncFu.compare_id_dumps(earlier_file, later_file)
}.to_not raise_error
end

it 'will supply a delete date if we don\'t supply the time' do
report = VoyagerHelpers::SyncFu.compare_id_dumps(earlier_file, later_file)
expect(report[:delete][0][:datetime]).to be_a DateTime
end
end
end










0 comments on commit 065b84b

Please sign in to comment.