Commit 1323871

mo khan <mo@mokhan.ca>
2015-05-31 22:56:01
import each ios workout.
1 parent b605d36
Changed files (2)
app
models
spec
models
app/models/ios/import.rb
@@ -7,10 +7,27 @@ class Ios::Import
   end
 
   def can_parse?(directory)
-    File.exist?(File.join(directory, "SLDB.sqlite"))
+    File.exist?(database_file(directory))
   end
 
   def import_from(directory)
-    puts "Importing from #{directory}..."
+    database(directory) do |db|
+      db.execute("SELECT * FROM ZBASEWORKOUT") do |row|
+        puts row.inspect
+        workout_name = row[5] == 1 ? "A" : "B"
+        workout = program.workouts.find_by(name: workout_name)
+        user.begin_workout(workout, DateTime.parse(row[8]), row[7].to_f)
+      end
+    end
+  end
+
+  private
+
+  def database_file(directory)
+    File.join(directory, "SLDB.sqlite")
+  end
+
+  def database(directory)
+    yield SQLite3::Database.new(database_file(directory))
   end
 end
spec/models/ios/import_spec.rb
@@ -1,9 +1,9 @@
 require "rails_helper"
 
 describe Ios::Import do
+  include_context "stronglifts_program"
   subject { Ios::Import.new(user, program) }
-  let(:user) { build(:user) }
-  let(:program) { build(:program) }
+  let(:user) { create(:user) }
 
   describe "#can_parse?" do
     let(:directory) { Dir.mktmpdir }
@@ -24,4 +24,22 @@ describe Ios::Import do
       end
     end
   end
+
+  describe "#import_from" do
+    let(:directory) { Dir.mktmpdir }
+    let(:backup_file) { Rails.root.join("spec", "fixtures", "backup.ios.stronglifts") }
+
+    before :each do
+      `unzip #{backup_file} -d #{directory}`
+    end
+
+    after :each do
+      FileUtils.remove_entry(directory)
+    end
+
+    it "imports each workout" do
+      subject.import_from(directory)
+      expect(user.training_sessions.count).to eql(9)
+    end
+  end
 end