traka 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +13 -9
- data/lib/generators/traka/install_generator.rb +11 -2
- data/{test/dummy/db/migrate/20131227113858_create_traka_changes.rb → lib/generators/traka/templates/migration.rb} +6 -3
- data/lib/traka.rb +1 -3
- data/lib/traka/{is_traka.rb → change.rb} +14 -22
- data/lib/traka/is_trakable.rb +3 -3
- data/lib/traka/version.rb +1 -1
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20140102053940_create_traka_changes.rb +15 -0
- data/test/dummy/db/schema.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +39 -0
- data/test/dummy/log/test.log +2757 -0
- data/test/is_trakable_test.rb +8 -8
- data/test/traka_change_test.rb +158 -0
- metadata +8 -13
- data/test/dummy/app/models/traka_change.rb +0 -5
- data/test/dummy/test/fixtures/traka_changes.yml +0 -13
- data/test/dummy/test/unit/traka_change_test.rb +0 -7
- data/test/is_traka_test.rb +0 -158
    
        data/test/is_trakable_test.rb
    CHANGED
    
    | @@ -3,8 +3,8 @@ require 'test_helper' | |
| 3 3 | 
             
            class IsTrakableTest < Test::Unit::TestCase
         | 
| 4 4 |  | 
| 5 5 | 
             
              def setup
         | 
| 6 | 
            -
                 | 
| 7 | 
            -
                 | 
| 6 | 
            +
                Traka::Change.destroy_all
         | 
| 7 | 
            +
                Traka::Change.set_version!(1)
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 10 | 
             
              def test_a_products_traka_uuid_should_be_uuid
         | 
| @@ -34,7 +34,7 @@ class IsTrakableTest < Test::Unit::TestCase | |
| 34 34 | 
             
              def test_a_product_should_record_changes_on_create
         | 
| 35 35 | 
             
                c = Product.new(:name => "Product B")
         | 
| 36 36 | 
             
                c.save
         | 
| 37 | 
            -
                tc =  | 
| 37 | 
            +
                tc = Traka::Change.last
         | 
| 38 38 |  | 
| 39 39 | 
             
                assert_equal tc.klass, "Product"
         | 
| 40 40 | 
             
                assert_equal tc.action_type, "create"
         | 
| @@ -44,7 +44,7 @@ class IsTrakableTest < Test::Unit::TestCase | |
| 44 44 | 
             
                c = Product.new(:name => "Product B")
         | 
| 45 45 | 
             
                c.save
         | 
| 46 46 | 
             
                c.destroy
         | 
| 47 | 
            -
                tc =  | 
| 47 | 
            +
                tc = Traka::Change.last
         | 
| 48 48 |  | 
| 49 49 | 
             
                assert_equal tc.klass, "Product"
         | 
| 50 50 | 
             
                assert_equal tc.action_type, "destroy"
         | 
| @@ -55,7 +55,7 @@ class IsTrakableTest < Test::Unit::TestCase | |
| 55 55 | 
             
                c.save
         | 
| 56 56 | 
             
                c.name = "New Name"
         | 
| 57 57 | 
             
                c.save
         | 
| 58 | 
            -
                tc =  | 
| 58 | 
            +
                tc = Traka::Change.last
         | 
| 59 59 |  | 
| 60 60 | 
             
                assert_equal tc.klass, "Product"
         | 
| 61 61 | 
             
                assert_equal tc.action_type, "update"
         | 
| @@ -64,7 +64,7 @@ class IsTrakableTest < Test::Unit::TestCase | |
| 64 64 | 
             
              def test_a_cheese_should_record_changes_on_create
         | 
| 65 65 | 
             
                c = Cheese.new(:name => "Cheese B")
         | 
| 66 66 | 
             
                c.save
         | 
| 67 | 
            -
                tc =  | 
| 67 | 
            +
                tc = Traka::Change.last
         | 
| 68 68 |  | 
| 69 69 | 
             
                assert_equal tc.klass, "Cheese"
         | 
| 70 70 | 
             
                assert_equal tc.action_type, "create"
         | 
| @@ -74,7 +74,7 @@ class IsTrakableTest < Test::Unit::TestCase | |
| 74 74 | 
             
                c = Cheese.new(:name => "Cheese B")
         | 
| 75 75 | 
             
                c.save
         | 
| 76 76 | 
             
                c.destroy
         | 
| 77 | 
            -
                tc =  | 
| 77 | 
            +
                tc = Traka::Change.last
         | 
| 78 78 |  | 
| 79 79 | 
             
                assert_equal tc.klass, "Cheese"
         | 
| 80 80 | 
             
                assert_equal tc.action_type, "destroy"
         | 
| @@ -85,7 +85,7 @@ class IsTrakableTest < Test::Unit::TestCase | |
| 85 85 | 
             
                c.save
         | 
| 86 86 | 
             
                c.name = "New Name"
         | 
| 87 87 | 
             
                c.save
         | 
| 88 | 
            -
                tc =  | 
| 88 | 
            +
                tc = Traka::Change.last
         | 
| 89 89 |  | 
| 90 90 | 
             
                assert_equal tc.klass, "Cheese"
         | 
| 91 91 | 
             
                assert_equal tc.action_type, "update"
         | 
| @@ -0,0 +1,158 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             
         | 
| 3 | 
            +
            class TrakaChangeTest < ActiveSupport::TestCase
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def setup
         | 
| 6 | 
            +
                Traka::Change.destroy_all
         | 
| 7 | 
            +
                Traka::Change.set_version!(1)
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              test "TrakaChange has latest version" do
         | 
| 11 | 
            +
                assert_equal Traka::Change.latest_version, 1
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              test "TrakaChange can publish new version" do
         | 
| 15 | 
            +
                assert_equal Traka::Change.latest_version, 1
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                Traka::Change.publish_new_version!
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                assert_equal Traka::Change.latest_version, 2
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              test "TrakaChange can list staged changes" do
         | 
| 23 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 24 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                assert_equal Traka::Change.staged_changes.count, 2
         | 
| 27 | 
            +
                assert_equal Traka::Change.staged_changes.first.klass, "Product"
         | 
| 28 | 
            +
                assert_equal Traka::Change.staged_changes.last.klass, "Cheese"
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              test "TrakaChange can list changes from a particular version" do
         | 
| 32 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 33 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                assert_equal Traka::Change.staged_changes.count, 2
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                Traka::Change.publish_new_version!
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                p2 = Product.create(:name => "Product B")
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                assert_equal Traka::Change.staged_changes.count, 1
         | 
| 42 | 
            +
                assert_equal Traka::Change.staged_changes.first.klass, "Product"
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                assert_equal Traka::Change.changes_from(1).count, 3
         | 
| 45 | 
            +
                assert_equal Traka::Change.changes_from(1).map(&:klass), ["Product", "Cheese", "Product"]
         | 
| 46 | 
            +
                assert_equal Traka::Change.changes_from(1).map(&:action_type), ["create", "create", "create"]
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              test "TrakaChange can list differing changes" do
         | 
| 50 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 51 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                Traka::Change.publish_new_version!
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                p.name = "New name"
         | 
| 56 | 
            +
                p.save
         | 
| 57 | 
            +
                c.destroy
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                assert_equal Traka::Change.staged_changes.count, 2
         | 
| 60 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:klass), ["Product", "Cheese"]
         | 
| 61 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:action_type), ["update", "destroy"]
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              test "TrakaChange can filter out obsolete create->destroy actions" do
         | 
| 65 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 66 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                p.destroy
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                assert_equal Traka::Change.staged_changes.count, 1
         | 
| 71 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:klass), ["Cheese"]
         | 
| 72 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:action_type), ["create"]
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              test "TrakaChange can filter out obsolete update->destroy actions" do
         | 
| 76 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 77 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                Traka::Change.publish_new_version!
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                p.name = "New name"
         | 
| 82 | 
            +
                p.save
         | 
| 83 | 
            +
                c.name = "New name"
         | 
| 84 | 
            +
                c.save
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                p.destroy
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                assert_equal Traka::Change.staged_changes.count, 1
         | 
| 89 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:klass), ["Cheese"]
         | 
| 90 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:action_type), ["update"]
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
              test "TrakaChange can filter out obsolete create->update actions" do
         | 
| 94 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 95 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                p.name = "New name"
         | 
| 98 | 
            +
                p.save
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                p.name = "Another name"
         | 
| 101 | 
            +
                p.save
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                assert_equal Traka::Change.staged_changes.count, 2
         | 
| 104 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:klass), ["Product", "Cheese"]
         | 
| 105 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:action_type), ["create", "create"]
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
              test "TrakaChange can filter out obsolete update->update actions" do
         | 
| 109 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 110 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                Traka::Change.publish_new_version!
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                p.name = "New name"
         | 
| 115 | 
            +
                p.save
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                p.name = "Another name"
         | 
| 118 | 
            +
                p.save
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                p.name = "And another name"
         | 
| 121 | 
            +
                p.save
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                c.name = "New name"
         | 
| 124 | 
            +
                c.save
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                assert_equal Traka::Change.staged_changes.count, 2
         | 
| 127 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:klass), ["Product", "Cheese"]
         | 
| 128 | 
            +
                assert_equal Traka::Change.staged_changes.map(&:action_type), ["update", "update"]
         | 
| 129 | 
            +
              end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              test "TrakaChange can give unabridged list of changes" do
         | 
| 132 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 133 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                p.name = "New name"
         | 
| 136 | 
            +
                p.save
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                p.name = "Another name"
         | 
| 139 | 
            +
                p.save
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                p.destroy
         | 
| 142 | 
            +
                c.destroy
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                # Abridged version would be empty because destroys would cancel out creates.
         | 
| 145 | 
            +
                assert_equal Traka::Change.staged_changes(false).count, 6
         | 
| 146 | 
            +
                assert_equal Traka::Change.staged_changes(false).map(&:klass), ["Product", "Cheese", "Product", "Product", "Product", "Cheese"]
         | 
| 147 | 
            +
                assert_equal Traka::Change.staged_changes(false).map(&:action_type), ["create", "create", "update", "update", "destroy", "destroy"]
         | 
| 148 | 
            +
              end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
              test "TrakaChange can resolve AR objects" do
         | 
| 151 | 
            +
                p = Product.create(:name => "Product A")
         | 
| 152 | 
            +
                c = Cheese.create(:name => "Cheese A")
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                assert_equal Traka::Change.staged_changes.first.get_record, p
         | 
| 155 | 
            +
                assert_equal Traka::Change.staged_changes.last.get_record, c
         | 
| 156 | 
            +
              end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            end 
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: traka
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2014-01-02 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rails
         | 
| @@ -51,10 +51,11 @@ extensions: [] | |
| 51 51 | 
             
            extra_rdoc_files: []
         | 
| 52 52 | 
             
            files:
         | 
| 53 53 | 
             
            - lib/traka/is_trakable.rb
         | 
| 54 | 
            +
            - lib/traka/change.rb
         | 
| 54 55 | 
             
            - lib/traka/version.rb
         | 
| 55 | 
            -
            - lib/traka/is_traka.rb
         | 
| 56 56 | 
             
            - lib/generators/traka/install_generator.rb
         | 
| 57 57 | 
             
            - lib/generators/traka/templates/public/system/api/version.txt
         | 
| 58 | 
            +
            - lib/generators/traka/templates/migration.rb
         | 
| 58 59 | 
             
            - lib/tasks/traka_tasks.rake
         | 
| 59 60 | 
             
            - lib/traka.rb
         | 
| 60 61 | 
             
            - lib/templates/active_record/model/model.rb
         | 
| @@ -73,9 +74,9 @@ files: | |
| 73 74 | 
             
            - test/dummy/public/favicon.ico
         | 
| 74 75 | 
             
            - test/dummy/db/schema.rb
         | 
| 75 76 | 
             
            - test/dummy/db/development.sqlite3
         | 
| 77 | 
            +
            - test/dummy/db/migrate/20140102053940_create_traka_changes.rb
         | 
| 76 78 | 
             
            - test/dummy/db/migrate/20131219051348_create_cheeses.rb
         | 
| 77 79 | 
             
            - test/dummy/db/migrate/20131219051328_create_products.rb
         | 
| 78 | 
            -
            - test/dummy/db/migrate/20131227113858_create_traka_changes.rb
         | 
| 79 80 | 
             
            - test/dummy/db/test.sqlite3
         | 
| 80 81 | 
             
            - test/dummy/config/application.rb
         | 
| 81 82 | 
             
            - test/dummy/config/environments/production.rb
         | 
| @@ -94,23 +95,20 @@ files: | |
| 94 95 | 
             
            - test/dummy/config/environment.rb
         | 
| 95 96 | 
             
            - test/dummy/README.rdoc
         | 
| 96 97 | 
             
            - test/dummy/script/rails
         | 
| 97 | 
            -
            - test/dummy/test/fixtures/traka_changes.yml
         | 
| 98 98 | 
             
            - test/dummy/test/fixtures/cheeses.yml
         | 
| 99 99 | 
             
            - test/dummy/test/fixtures/products.yml
         | 
| 100 100 | 
             
            - test/dummy/test/unit/product_test.rb
         | 
| 101 101 | 
             
            - test/dummy/test/unit/cheese_test.rb
         | 
| 102 | 
            -
            - test/dummy/test/unit/traka_change_test.rb
         | 
| 103 102 | 
             
            - test/dummy/app/controllers/application_controller.rb
         | 
| 104 103 | 
             
            - test/dummy/app/assets/stylesheets/application.css
         | 
| 105 104 | 
             
            - test/dummy/app/assets/javascripts/application.js
         | 
| 106 105 | 
             
            - test/dummy/app/helpers/application_helper.rb
         | 
| 107 106 | 
             
            - test/dummy/app/views/layouts/application.html.erb
         | 
| 108 107 | 
             
            - test/dummy/app/models/product.rb
         | 
| 109 | 
            -
            - test/dummy/app/models/traka_change.rb
         | 
| 110 108 | 
             
            - test/dummy/app/models/cheese.rb
         | 
| 111 109 | 
             
            - test/traka_test.rb
         | 
| 112 | 
            -
            - test/is_traka_test.rb
         | 
| 113 110 | 
             
            - test/is_trakable_test.rb
         | 
| 111 | 
            +
            - test/traka_change_test.rb
         | 
| 114 112 | 
             
            homepage: http://github.com/buntine/traka
         | 
| 115 113 | 
             
            licenses:
         | 
| 116 114 | 
             
            - MIT
         | 
| @@ -149,9 +147,9 @@ test_files: | |
| 149 147 | 
             
            - test/dummy/public/favicon.ico
         | 
| 150 148 | 
             
            - test/dummy/db/schema.rb
         | 
| 151 149 | 
             
            - test/dummy/db/development.sqlite3
         | 
| 150 | 
            +
            - test/dummy/db/migrate/20140102053940_create_traka_changes.rb
         | 
| 152 151 | 
             
            - test/dummy/db/migrate/20131219051348_create_cheeses.rb
         | 
| 153 152 | 
             
            - test/dummy/db/migrate/20131219051328_create_products.rb
         | 
| 154 | 
            -
            - test/dummy/db/migrate/20131227113858_create_traka_changes.rb
         | 
| 155 153 | 
             
            - test/dummy/db/test.sqlite3
         | 
| 156 154 | 
             
            - test/dummy/config/application.rb
         | 
| 157 155 | 
             
            - test/dummy/config/environments/production.rb
         | 
| @@ -170,20 +168,17 @@ test_files: | |
| 170 168 | 
             
            - test/dummy/config/environment.rb
         | 
| 171 169 | 
             
            - test/dummy/README.rdoc
         | 
| 172 170 | 
             
            - test/dummy/script/rails
         | 
| 173 | 
            -
            - test/dummy/test/fixtures/traka_changes.yml
         | 
| 174 171 | 
             
            - test/dummy/test/fixtures/cheeses.yml
         | 
| 175 172 | 
             
            - test/dummy/test/fixtures/products.yml
         | 
| 176 173 | 
             
            - test/dummy/test/unit/product_test.rb
         | 
| 177 174 | 
             
            - test/dummy/test/unit/cheese_test.rb
         | 
| 178 | 
            -
            - test/dummy/test/unit/traka_change_test.rb
         | 
| 179 175 | 
             
            - test/dummy/app/controllers/application_controller.rb
         | 
| 180 176 | 
             
            - test/dummy/app/assets/stylesheets/application.css
         | 
| 181 177 | 
             
            - test/dummy/app/assets/javascripts/application.js
         | 
| 182 178 | 
             
            - test/dummy/app/helpers/application_helper.rb
         | 
| 183 179 | 
             
            - test/dummy/app/views/layouts/application.html.erb
         | 
| 184 180 | 
             
            - test/dummy/app/models/product.rb
         | 
| 185 | 
            -
            - test/dummy/app/models/traka_change.rb
         | 
| 186 181 | 
             
            - test/dummy/app/models/cheese.rb
         | 
| 187 182 | 
             
            - test/traka_test.rb
         | 
| 188 | 
            -
            - test/is_traka_test.rb
         | 
| 189 183 | 
             
            - test/is_trakable_test.rb
         | 
| 184 | 
            +
            - test/traka_change_test.rb
         | 
    
        data/test/is_traka_test.rb
    DELETED
    
    | @@ -1,158 +0,0 @@ | |
| 1 | 
            -
            require 'test_helper'
         | 
| 2 | 
            -
             
         | 
| 3 | 
            -
            class IsTrakaTest < ActiveSupport::TestCase
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              def setup
         | 
| 6 | 
            -
                TrakaChange.destroy_all
         | 
| 7 | 
            -
                TrakaChange.set_version!(1)
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              test "TrakaChange has latest version" do
         | 
| 11 | 
            -
                assert_equal TrakaChange.latest_version, 1
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              test "TrakaChange can publish new version" do
         | 
| 15 | 
            -
                assert_equal TrakaChange.latest_version, 1
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                TrakaChange.publish_new_version!
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                assert_equal TrakaChange.latest_version, 2
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              test "TrakaChange can list staged changes" do
         | 
| 23 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 24 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                assert_equal TrakaChange.staged_changes.count, 2
         | 
| 27 | 
            -
                assert_equal TrakaChange.staged_changes.first.klass, "Product"
         | 
| 28 | 
            -
                assert_equal TrakaChange.staged_changes.last.klass, "Cheese"
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
              test "TrakaChange can list changes from a particular version" do
         | 
| 32 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 33 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                assert_equal TrakaChange.staged_changes.count, 2
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                TrakaChange.publish_new_version!
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                p2 = Product.create(:name => "Product B")
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                assert_equal TrakaChange.staged_changes.count, 1
         | 
| 42 | 
            -
                assert_equal TrakaChange.staged_changes.first.klass, "Product"
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                assert_equal TrakaChange.changes_from(1).count, 3
         | 
| 45 | 
            -
                assert_equal TrakaChange.changes_from(1).map(&:klass), ["Product", "Cheese", "Product"]
         | 
| 46 | 
            -
                assert_equal TrakaChange.changes_from(1).map(&:action_type), ["create", "create", "create"]
         | 
| 47 | 
            -
              end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
              test "TrakaChange can list differing changes" do
         | 
| 50 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 51 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                TrakaChange.publish_new_version!
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                p.name = "New name"
         | 
| 56 | 
            -
                p.save
         | 
| 57 | 
            -
                c.destroy
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                assert_equal TrakaChange.staged_changes.count, 2
         | 
| 60 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:klass), ["Product", "Cheese"]
         | 
| 61 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:action_type), ["update", "destroy"]
         | 
| 62 | 
            -
              end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
              test "TrakaChange can filter out obsolete create->destroy actions" do
         | 
| 65 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 66 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 67 | 
            -
             | 
| 68 | 
            -
                p.destroy
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                assert_equal TrakaChange.staged_changes.count, 1
         | 
| 71 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:klass), ["Cheese"]
         | 
| 72 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:action_type), ["create"]
         | 
| 73 | 
            -
              end
         | 
| 74 | 
            -
             | 
| 75 | 
            -
              test "TrakaChange can filter out obsolete update->destroy actions" do
         | 
| 76 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 77 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                TrakaChange.publish_new_version!
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                p.name = "New name"
         | 
| 82 | 
            -
                p.save
         | 
| 83 | 
            -
                c.name = "New name"
         | 
| 84 | 
            -
                c.save
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                p.destroy
         | 
| 87 | 
            -
             | 
| 88 | 
            -
                assert_equal TrakaChange.staged_changes.count, 1
         | 
| 89 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:klass), ["Cheese"]
         | 
| 90 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:action_type), ["update"]
         | 
| 91 | 
            -
              end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
              test "TrakaChange can filter out obsolete create->update actions" do
         | 
| 94 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 95 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                p.name = "New name"
         | 
| 98 | 
            -
                p.save
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                p.name = "Another name"
         | 
| 101 | 
            -
                p.save
         | 
| 102 | 
            -
             | 
| 103 | 
            -
                assert_equal TrakaChange.staged_changes.count, 2
         | 
| 104 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:klass), ["Product", "Cheese"]
         | 
| 105 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:action_type), ["create", "create"]
         | 
| 106 | 
            -
              end
         | 
| 107 | 
            -
             | 
| 108 | 
            -
              test "TrakaChange can filter out obsolete update->update actions" do
         | 
| 109 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 110 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                TrakaChange.publish_new_version!
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                p.name = "New name"
         | 
| 115 | 
            -
                p.save
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                p.name = "Another name"
         | 
| 118 | 
            -
                p.save
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                p.name = "And another name"
         | 
| 121 | 
            -
                p.save
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                c.name = "New name"
         | 
| 124 | 
            -
                c.save
         | 
| 125 | 
            -
             | 
| 126 | 
            -
                assert_equal TrakaChange.staged_changes.count, 2
         | 
| 127 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:klass), ["Product", "Cheese"]
         | 
| 128 | 
            -
                assert_equal TrakaChange.staged_changes.map(&:action_type), ["update", "update"]
         | 
| 129 | 
            -
              end
         | 
| 130 | 
            -
             | 
| 131 | 
            -
              test "TrakaChange can give unabridged list of changes" do
         | 
| 132 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 133 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 134 | 
            -
             | 
| 135 | 
            -
                p.name = "New name"
         | 
| 136 | 
            -
                p.save
         | 
| 137 | 
            -
             | 
| 138 | 
            -
                p.name = "Another name"
         | 
| 139 | 
            -
                p.save
         | 
| 140 | 
            -
             | 
| 141 | 
            -
                p.destroy
         | 
| 142 | 
            -
                c.destroy
         | 
| 143 | 
            -
             | 
| 144 | 
            -
                # Abridged version would be empty because destroys would cancel out creates.
         | 
| 145 | 
            -
                assert_equal TrakaChange.staged_changes(false).count, 6
         | 
| 146 | 
            -
                assert_equal TrakaChange.staged_changes(false).map(&:klass), ["Product", "Cheese", "Product", "Product", "Product", "Cheese"]
         | 
| 147 | 
            -
                assert_equal TrakaChange.staged_changes(false).map(&:action_type), ["create", "create", "update", "update", "destroy", "destroy"]
         | 
| 148 | 
            -
              end
         | 
| 149 | 
            -
             | 
| 150 | 
            -
              test "TrakaChange can resolve AR objects" do
         | 
| 151 | 
            -
                p = Product.create(:name => "Product A")
         | 
| 152 | 
            -
                c = Cheese.create(:name => "Cheese A")
         | 
| 153 | 
            -
             | 
| 154 | 
            -
                assert_equal TrakaChange.staged_changes.first.get_record, p
         | 
| 155 | 
            -
                assert_equal TrakaChange.staged_changes.last.get_record, c
         | 
| 156 | 
            -
              end
         | 
| 157 | 
            -
             | 
| 158 | 
            -
            end 
         |