maglevrecord 0.0.3 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/.gitignore +35 -0
  2. data/.travis.yml +19 -0
  3. data/Gemfile +13 -0
  4. data/README.md +89 -0
  5. data/Rakefile +22 -0
  6. data/install.sh +238 -0
  7. data/lib/maglev_record/base.rb +10 -62
  8. data/lib/maglev_record/enumerable.rb +13 -24
  9. data/lib/maglev_record/errors.rb +10 -0
  10. data/lib/maglev_record/integration.rb +7 -0
  11. data/lib/maglev_record/maglev_record.rb +13 -0
  12. data/lib/maglev_record/maglev_support/active_support_patch.rb +31 -0
  13. data/lib/maglev_record/maglev_support/concern.rb +19 -0
  14. data/lib/maglev_record/maglev_support/maglev_support.rb +15 -0
  15. data/lib/maglev_record/maglev_support/secure_password.rb +39 -0
  16. data/lib/maglev_record/migration/loader.rb +38 -0
  17. data/lib/maglev_record/migration/migration.rb +142 -0
  18. data/lib/maglev_record/migration/migrator.rb +40 -0
  19. data/lib/maglev_record/migration/operations.rb +92 -0
  20. data/lib/maglev_record/migration.rb +5 -0
  21. data/lib/maglev_record/persistence.rb +23 -48
  22. data/lib/maglev_record/raketasks.rb +9 -0
  23. data/lib/maglev_record/read_write.rb +20 -10
  24. data/lib/maglev_record/rooted_base.rb +8 -0
  25. data/lib/maglev_record/rooted_enumerable.rb +25 -0
  26. data/lib/maglev_record/rooted_persistence.rb +36 -0
  27. data/lib/maglev_record/sensible.rb +28 -0
  28. data/lib/maglev_record/snapshot/change.rb +53 -0
  29. data/lib/maglev_record/snapshot/snapshot.rb +67 -0
  30. data/lib/maglev_record/snapshot/snapshotable.rb +58 -0
  31. data/lib/maglev_record/snapshot.rb +5 -0
  32. data/lib/maglev_record/tools/object_reference.rb +189 -0
  33. data/lib/maglev_record/tools/submodule_finder.rb +42 -0
  34. data/lib/maglev_record/tools.rb +2 -0
  35. data/lib/maglev_record.rb +60 -4
  36. data/lib/tasks/database.rake +38 -0
  37. data/maglevrecord.gemspec +17 -0
  38. data/rails/init.rb +1 -0
  39. data/test/_test_object_reference.rb +70 -0
  40. data/test/example_model.rb +26 -13
  41. data/test/migration/dummy_migrations/migration_1.rb +8 -0
  42. data/test/migration/dummy_migrations/migration_2.rb +8 -0
  43. data/test/migration/dummy_migrations/migration_3.rb +8 -0
  44. data/test/migration/migrations/migration_1.rb +12 -0
  45. data/test/migration/migrations/migration_2.rb +12 -0
  46. data/test/migration/migrations/migration_3.rb +12 -0
  47. data/test/migration/operation_setup.rb +91 -0
  48. data/test/migration/projects/project1/.gitignore +15 -0
  49. data/test/migration/projects/project1/Gemfile +43 -0
  50. data/test/migration/projects/project1/Gemfile.lock +114 -0
  51. data/test/migration/projects/project1/README.rdoc +261 -0
  52. data/test/migration/projects/project1/Rakefile +17 -0
  53. data/test/migration/projects/project1/app/assets/images/rails.png +0 -0
  54. data/test/migration/projects/project1/app/assets/javascripts/application.js +15 -0
  55. data/test/migration/projects/project1/app/assets/stylesheets/application.css +13 -0
  56. data/test/migration/projects/project1/app/controllers/application_controller.rb +3 -0
  57. data/test/migration/projects/project1/app/helpers/application_helper.rb +2 -0
  58. data/test/migration/projects/project1/app/mailers/.gitkeep +0 -0
  59. data/test/migration/projects/project1/app/models/.gitkeep +0 -0
  60. data/test/migration/projects/project1/app/views/layouts/application.html.erb +14 -0
  61. data/test/migration/projects/project1/config/application.rb +62 -0
  62. data/test/migration/projects/project1/config/boot.rb +6 -0
  63. data/test/migration/projects/project1/config/database.yml +25 -0
  64. data/test/migration/projects/project1/config/environment.rb +5 -0
  65. data/test/migration/projects/project1/config/environments/development.rb +37 -0
  66. data/test/migration/projects/project1/config/environments/production.rb +67 -0
  67. data/test/migration/projects/project1/config/initializers/backtrace_silencers.rb +7 -0
  68. data/test/migration/projects/project1/config/initializers/inflections.rb +15 -0
  69. data/test/migration/projects/project1/config/initializers/mime_types.rb +5 -0
  70. data/test/migration/projects/project1/config/initializers/secret_token.rb +7 -0
  71. data/test/migration/projects/project1/config/initializers/session_store.rb +8 -0
  72. data/test/migration/projects/project1/config/initializers/wrap_parameters.rb +14 -0
  73. data/test/migration/projects/project1/config/locales/en.yml +5 -0
  74. data/test/migration/projects/project1/config/routes.rb +58 -0
  75. data/test/migration/projects/project1/config.ru +4 -0
  76. data/test/migration/projects/project1/db/seeds.rb +7 -0
  77. data/test/migration/projects/project1/lib/assets/.gitkeep +0 -0
  78. data/test/migration/projects/project1/lib/tasks/.gitkeep +0 -0
  79. data/test/migration/projects/project1/log/.gitkeep +0 -0
  80. data/test/migration/projects/project1/public/404.html +26 -0
  81. data/test/migration/projects/project1/public/422.html +26 -0
  82. data/test/migration/projects/project1/public/500.html +25 -0
  83. data/test/migration/projects/project1/public/favicon.ico +0 -0
  84. data/test/migration/projects/project1/public/index.html +241 -0
  85. data/test/migration/projects/project1/public/robots.txt +5 -0
  86. data/test/migration/projects/project1/script/rails +6 -0
  87. data/test/migration/projects/project2/.gitignore +15 -0
  88. data/test/migration/projects/project2/Gemfile +44 -0
  89. data/test/migration/projects/project2/Gemfile.lock +115 -0
  90. data/test/migration/projects/project2/README.rdoc +261 -0
  91. data/test/migration/projects/project2/Rakefile +17 -0
  92. data/test/migration/projects/project2/app/assets/images/rails.png +0 -0
  93. data/test/migration/projects/project2/app/assets/javascripts/application.js +15 -0
  94. data/test/migration/projects/project2/app/assets/stylesheets/application.css +13 -0
  95. data/test/migration/projects/project2/app/controllers/application_controller.rb +3 -0
  96. data/test/migration/projects/project2/app/helpers/application_helper.rb +2 -0
  97. data/test/migration/projects/project2/app/mailers/.gitkeep +0 -0
  98. data/test/migration/projects/project2/app/models/.gitkeep +0 -0
  99. data/test/migration/projects/project2/app/models/project_model.rb +8 -0
  100. data/test/migration/projects/project2/app/views/layouts/application.html.erb +14 -0
  101. data/test/migration/projects/project2/config/application.rb +62 -0
  102. data/test/migration/projects/project2/config/boot.rb +6 -0
  103. data/test/migration/projects/project2/config/database.yml +25 -0
  104. data/test/migration/projects/project2/config/environment.rb +5 -0
  105. data/test/migration/projects/project2/config/environments/development.rb +37 -0
  106. data/test/migration/projects/project2/config/environments/production.rb +67 -0
  107. data/test/migration/projects/project2/config/initializers/backtrace_silencers.rb +7 -0
  108. data/test/migration/projects/project2/config/initializers/inflections.rb +15 -0
  109. data/test/migration/projects/project2/config/initializers/mime_types.rb +5 -0
  110. data/test/migration/projects/project2/config/initializers/secret_token.rb +7 -0
  111. data/test/migration/projects/project2/config/initializers/session_store.rb +8 -0
  112. data/test/migration/projects/project2/config/initializers/wrap_parameters.rb +14 -0
  113. data/test/migration/projects/project2/config/locales/en.yml +5 -0
  114. data/test/migration/projects/project2/config/routes.rb +58 -0
  115. data/test/migration/projects/project2/config.ru +4 -0
  116. data/test/migration/projects/project2/db/seeds.rb +7 -0
  117. data/test/migration/projects/project2/lib/assets/.gitkeep +0 -0
  118. data/test/migration/projects/project2/lib/tasks/.gitkeep +0 -0
  119. data/test/migration/projects/project2/log/.gitkeep +0 -0
  120. data/test/migration/projects/project2/migrations/migration_2013-04-Apr-23_17.31.38.rb +16 -0
  121. data/test/migration/projects/project2/migrations/migration_2013-04-Apr-23_17.31.52.rb +16 -0
  122. data/test/migration/projects/project2/migrations/migration_2013-04-Apr-23_17.32.07.rb +16 -0
  123. data/test/migration/projects/project2/public/404.html +26 -0
  124. data/test/migration/projects/project2/public/422.html +26 -0
  125. data/test/migration/projects/project2/public/500.html +25 -0
  126. data/test/migration/projects/project2/public/favicon.ico +0 -0
  127. data/test/migration/projects/project2/public/index.html +241 -0
  128. data/test/migration/projects/project2/public/robots.txt +5 -0
  129. data/test/migration/projects/project2/script/rails +6 -0
  130. data/test/migration/test_loader.rb +78 -0
  131. data/test/migration/test_migration.rb +127 -0
  132. data/test/migration/test_nonexistent_classes.rb +120 -0
  133. data/test/migration/test_operations_fit_together.rb +68 -0
  134. data/test/migration/test_project.rb +105 -0
  135. data/test/migration/test_project1.slow.rb +58 -0
  136. data/test/migration/test_project2.slow.rb +34 -0
  137. data/test/migration/test_remove.rb +219 -0
  138. data/test/migration/test_rename.rb +238 -0
  139. data/test/migration/test_scenario.rb +37 -0
  140. data/test/migration/todo.txt +17 -0
  141. data/test/more_asserts.rb +63 -0
  142. data/test/snapshot/test_snapshot.rb +99 -0
  143. data/test/snapshot/test_snapshot_attributes.slow.rb +57 -0
  144. data/test/snapshot/test_snapshot_classes.slow.rb +32 -0
  145. data/test/snapshot/test_snapshotable.rb +53 -0
  146. data/test/test_accessors.rb +46 -0
  147. data/test/test_active_model_like_interface.rb +1 -1
  148. data/test/test_model_timestamps.rb +22 -0
  149. data/test/test_more_asserts.rb +68 -0
  150. data/test/test_naming.rb +22 -0
  151. data/test/test_persistence.rb +127 -0
  152. data/test/test_query_interface.rb +20 -25
  153. data/test/test_sensibles.rb +38 -0
  154. data/test/test_validation.rb +20 -57
  155. data/todo.txt +1 -0
  156. data/update.sh +180 -0
  157. metadata +156 -12
  158. data/lib/maglev_record/model_not_saved_or_reset.rb +0 -15
  159. data/test/test_dirty_object.rb +0 -50
  160. data/test/test_maglev_record_base.rb +0 -22
  161. data/test/test_maglev_simple_persistance.rb +0 -45
@@ -0,0 +1,57 @@
1
+ require "snapshot/test_snapshot"
2
+
3
+ class AttrSnapshotTest < SnapshotTest
4
+
5
+ def self.changes
6
+ @changes
7
+ end
8
+
9
+ as_instance_method :changes
10
+
11
+ def self.startup
12
+ super
13
+ clean
14
+ @changes = compare(
15
+ class_string('MyTestClass2', 'attr_accessor :no_value, :lala'),
16
+ class_string('MyTestClass2', 'attr_accessor :students, :lala'))
17
+ end
18
+
19
+ def self.shutdown
20
+ super
21
+ clean
22
+ end
23
+
24
+ def test_snapshot_without_error
25
+ assert_not_nil changes
26
+ end
27
+
28
+ def test_no_class_removed
29
+ assert_equal changes.removed_classes, []
30
+ end
31
+
32
+ def test_class_changed
33
+ assert_equal changes.changed_classes.size, 1
34
+ end
35
+
36
+ def test_no_class_was_added
37
+ assert_equal [], changes.new_classes
38
+ end
39
+
40
+ def changed_class
41
+ assert_not_nil changes.changed_classes[0], 'a class must have changed'
42
+ changes.changed_classes[0]
43
+ end
44
+
45
+ def test_accessor_added
46
+ assert_equal changed_class.new_attr_accessors, [:students]
47
+ end
48
+
49
+ def test_accessor_removed
50
+ assert_equal changed_class.removed_attr_accessors, [:no_value]
51
+ end
52
+
53
+ # TODO: add tests for attr_reader and attr_writer ...
54
+
55
+ end
56
+
57
+
@@ -0,0 +1,32 @@
1
+ require "snapshot/test_snapshot"
2
+
3
+ class ClassSnapshotTest < SnapshotTest
4
+
5
+ def setup
6
+ super
7
+ clean
8
+ end
9
+
10
+ def teardown
11
+ super
12
+ clean
13
+ end
14
+
15
+ def test_new_class
16
+ changes = compare('', class_string('MyTestClass', 'def x;end'))
17
+ assert_equal 1, changes.new_classes.size
18
+ classdiv = changes.new_classes[0]
19
+ assert_equal classdiv.class_name, 'MyTestClass'
20
+ assert_equal classdiv.snapshot_class, MyTestClass
21
+ end
22
+
23
+ def test_class_removed_from_file_but_still_in_stone
24
+ changes= compare(class_string('MyTestClass2', 'def x;end'), '')
25
+ assert_equal 1, changes.removed_classes.size
26
+ classdiv = changes.removed_classes[0]
27
+ assert_equal classdiv.class_name, 'MyTestClass2'
28
+ assert_equal classdiv.snapshot_class, MyTestClass2
29
+ end
30
+
31
+ end
32
+
@@ -0,0 +1,53 @@
1
+ require "maglev_record"
2
+ require "more_asserts"
3
+
4
+ class MySnapshotableClass
5
+ include MaglevRecord::Snapshotable
6
+ end
7
+
8
+ class MySnapshotableSubclass < MySnapshotableClass
9
+ end
10
+
11
+ class MyNotSnapshotableClass
12
+ end
13
+
14
+ class MyBaseClass
15
+ include MaglevRecord::Base
16
+ end
17
+
18
+ class SnapshotableTest < Test::Unit::TestCase
19
+
20
+ def self.startup
21
+ @snapshotable_classes = MaglevRecord::Snapshotable.snapshotable_classes
22
+ end
23
+
24
+ def self.snapshotable_classes
25
+ @snapshotable_classes
26
+ end
27
+
28
+ def snapshotable_classes
29
+ self.class.snapshotable_classes
30
+ end
31
+
32
+ def test_includes_MySnapshotableClass
33
+ assert_include? snapshotable_classes, MySnapshotableClass
34
+ end
35
+
36
+ def test_deas_not_include_Bases
37
+ assert_not_include? snapshotable_classes, MaglevRecord::Base
38
+ assert_not_include? snapshotable_classes, MaglevRecord::RootedBase
39
+ end
40
+
41
+ def test_does_not_include_some_other_class
42
+ assert_not_include? snapshotable_classes, MyNotSnapshotableClass
43
+ end
44
+
45
+ def test_includes_subclass
46
+ assert_include? snapshotable_classes, MySnapshotableSubclass
47
+ end
48
+
49
+ def test_classes_including_base
50
+ assert_include? snapshotable_classes, MyBaseClass
51
+ end
52
+
53
+ end
@@ -0,0 +1,46 @@
1
+ require "more_asserts"
2
+ require "maglev_record"
3
+ require "example_model"
4
+
5
+ class AccessorTest < Test::Unit::TestCase
6
+
7
+ def rooted_example_book
8
+ RootedBook.example
9
+ end
10
+
11
+ def unrooted_example_book
12
+ UnrootedBook.example
13
+ end
14
+
15
+ def test_accessors_working
16
+ [rooted_example_book, unrooted_example_book].each do |b|
17
+ assert_equal b.author, "Author"
18
+ assert_equal b.title, "Title"
19
+ end
20
+ end
21
+
22
+ def test_accessors_are_not_instance_variables
23
+ [rooted_example_book, unrooted_example_book].each do |b|
24
+ # In ruby 1.9 these are Symbols!
25
+ assert_not b.instance_variables.include? "@author"
26
+ assert_not b.instance_variables.include? "@title"
27
+ end
28
+ end
29
+
30
+ def test_accessors_are_stored_in_a_hash
31
+ [rooted_example_book, unrooted_example_book].each do |b|
32
+ assert b.attributes.is_a? Hash
33
+ assert b.attributes.has_key? :author
34
+ assert b.attributes.has_key? :title
35
+ end
36
+ end
37
+
38
+ def test_updating_attributes
39
+ [rooted_example_book, unrooted_example_book].each do |b|
40
+ b.update_attributes(:title => "New Title", :author => 2)
41
+ assert_equal b.title, "New Title"
42
+ assert_equal b.author, 2
43
+ end
44
+ end
45
+
46
+ end
@@ -6,6 +6,6 @@ class ActiveModelLikeInterfaceTest < Test::Unit::TestCase
6
6
  include ActiveModel::Lint::Tests
7
7
 
8
8
  def model
9
- Book.dummy
9
+ RootedBook.example
10
10
  end
11
11
  end
@@ -0,0 +1,22 @@
1
+ require "more_asserts"
2
+ require "maglev_record"
3
+ require "example_model"
4
+ require "timecop"
5
+
6
+ class ModelTimestampTest < Test::Unit::TestCase
7
+
8
+ def test_time
9
+ @test_time ||= Time.local(2008, 9, 1, 10, 5, 0)
10
+ end
11
+ def test_created_at
12
+ Timecop.freeze(test_time)
13
+ model = RootedBook.example
14
+ assert_equal model.created_at, test_time
15
+ end
16
+
17
+ def teardown
18
+ Timecop.return
19
+ end
20
+
21
+
22
+ end
@@ -0,0 +1,68 @@
1
+ require 'more_asserts'
2
+
3
+ class MyTest < Test::Unit::TestCase
4
+
5
+ def self.startup
6
+ #puts 'runs only once at start2'
7
+ if @startup_called.nil?
8
+ @startup_called = 1
9
+ else
10
+ @startup_called += 1
11
+ end
12
+ super
13
+ end
14
+
15
+ def self.shutdown
16
+ #puts 'runs only once at end2'
17
+ if @shutdown_called.nil?
18
+ @shutdown_called = 1
19
+ else
20
+ @shutdown_called += 1
21
+ end
22
+ super
23
+ end
24
+
25
+ def setup
26
+ @setup_called = true
27
+ #puts 'runs before each test'
28
+ end
29
+
30
+ def teardown
31
+ @teardown_called = true
32
+ #puts 'runs after each test'
33
+ end
34
+
35
+ def test_stuff
36
+ assert_equal @setup_called, true
37
+ assert_equal @teardown_called, nil
38
+ assert_equal self.class.instance_variable_get( :@shutdown_called ), nil
39
+ assert_equal self.class.instance_variable_get( :@startup_called ), 1
40
+ end
41
+
42
+ def test_stuff2
43
+ test_stuff
44
+ end
45
+
46
+ class << self
47
+ alias :old_suite123 :suite
48
+
49
+ def suite
50
+ raise unless MyTest.instance_variable_get(:@shutdown_called) == nil
51
+ raise unless MyTest.instance_variable_get(:@startup_called) == nil
52
+ ret = old_suite123
53
+ class << ret
54
+ alias :run_old123 :run
55
+
56
+ def run(*args, &block)
57
+ raise unless MyTest.instance_variable_get(:@shutdown_called) == nil
58
+ raise unless MyTest.instance_variable_get(:@startup_called) == nil
59
+ ret = run_old123(*args, &block)
60
+ raise unless MyTest.instance_variable_get(:@shutdown_called) == 1
61
+ raise unless MyTest.instance_variable_get(:@startup_called) == 1
62
+ ret
63
+ end
64
+ end
65
+ ret
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,22 @@
1
+ require "more_asserts"
2
+ require "maglev_record"
3
+ require "example_model"
4
+
5
+ class NamingTest < Test::Unit::TestCase
6
+
7
+ def rooted_example_book
8
+ RootedBook.example
9
+ end
10
+
11
+ def unrooted_example_book
12
+ UnrootedBook.example
13
+ end
14
+
15
+ def test_models_respond_to_model_name
16
+ [rooted_example_book, unrooted_example_book].each do |b|
17
+ assert b.class.respond_to?(:model_name)
18
+ end
19
+ assert_equal "RootedBook", rooted_example_book.class.model_name
20
+ assert_equal "UnrootedBook", unrooted_example_book.class.model_name
21
+ end
22
+ end
@@ -0,0 +1,127 @@
1
+ require "more_asserts"
2
+ require "maglev_record"
3
+ require "example_model"
4
+
5
+ class UnrootedPersistanceTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ MaglevRecord.reset
9
+ end
10
+
11
+ def new_unrooted_example_book
12
+ UnrootedBook.example
13
+ end
14
+
15
+ def test_new_creates_new_object
16
+ b = new_unrooted_example_book
17
+ assert_not_nil b
18
+ assert_equal b.author, "Author"
19
+ assert_equal b.title, "Title"
20
+ end
21
+
22
+ def test_new_object_is_maglev_persistable
23
+ assert new_unrooted_example_book.class.maglev_persistable?
24
+ end
25
+
26
+ def test_new_object_is_not_persisted
27
+ b = new_unrooted_example_book
28
+ assert b.new_record?
29
+ assert_not b.persisted?
30
+ end
31
+
32
+ def test_persisted_object_is_persisted
33
+ b = new_unrooted_example_book
34
+ Maglev::PERSISTENT_ROOT[:test] = b
35
+ assert b.new_record?
36
+ assert_not b.persisted?
37
+ MaglevRecord.save
38
+ assert b.persisted?
39
+ assert_not b.new_record?
40
+ end
41
+
42
+ def test_create_on_unrooted_model_should_raise_error
43
+ assert_raise MaglevRecord::InvalidOperationError do
44
+ UnrootedBook.create
45
+ end
46
+ end
47
+
48
+ def test_clear_on_unrooted_model_should_raise_error
49
+ assert_raise MaglevRecord::InvalidOperationError do
50
+ UnrootedBook.clear
51
+ end
52
+ end
53
+
54
+ def test_id_returns_object_id
55
+ b = new_unrooted_example_book
56
+ assert_equal b.id, b.object_id
57
+ end
58
+
59
+ end
60
+
61
+ class RootedPersistanceTest < Test::Unit::TestCase
62
+
63
+ def new_rooted_example_book
64
+ RootedBook.example
65
+ end
66
+
67
+ def setup
68
+ MaglevRecord.reset
69
+ # RootedBook.clear
70
+ end
71
+
72
+ def test_new_creates_new_object
73
+ b = new_rooted_example_book
74
+ assert_not_nil b
75
+ assert_equal b.author, "Author"
76
+ assert_equal b.title, "Title"
77
+ end
78
+
79
+ def test_new_stores_object_in_persistent_root
80
+ b = new_rooted_example_book
81
+ assert RootedBook.object_pool.has_value? b
82
+ end
83
+
84
+ def test_new_object_is_maglev_persistable
85
+ assert new_rooted_example_book.class.maglev_persistable?
86
+ end
87
+
88
+ def test_new_object_is_not_persisted
89
+ b = new_rooted_example_book
90
+ assert b.new_record?
91
+ assert_not b.persisted?
92
+ end
93
+
94
+ def test_persisted_object_is_persisted
95
+ b = new_rooted_example_book
96
+ Maglev::PERSISTENT_ROOT[:test] = b
97
+ assert b.new_record?
98
+ assert_not b.persisted?
99
+ MaglevRecord.save
100
+ assert b.persisted?
101
+ assert_not b.new_record?
102
+ end
103
+
104
+ def test_object_pool_key_is_a_class
105
+ assert_equal RootedBook.object_pool_key, RootedBook
106
+ end
107
+
108
+ def test_object_pool_is_a_hash
109
+ assert RootedBook.object_pool.is_a? Hash
110
+ end
111
+
112
+ def test_clear_clears
113
+ RootedBook.new(RootedBook.example_params)
114
+ assert_not_equal RootedBook.object_pool.size, 0
115
+ MaglevRecord.save
116
+ RootedBook.clear
117
+ assert_equal RootedBook.object_pool.size, 0
118
+ end
119
+
120
+ # def test_create_commits_model
121
+ # assert_equal RootedBook.size, 0
122
+ # RootedBook.create(RootedBook.example_params)
123
+ # MaglevRecord.reset
124
+ # assert_equal RootedBook.size, 1
125
+ # end
126
+
127
+ end
@@ -5,46 +5,41 @@ require "example_model"
5
5
  class QueryInterfaceTest < Test::Unit::TestCase
6
6
 
7
7
  def setup
8
- [
9
- Book.new(:title => "Harry Potter and the Philosopher's stone", :author => "Joanne K. Rowling"),
10
- Book.new(:title => "Harry Potter and the Chamber of Secrets", :author => "Joanne K. Rowling"),
11
- Book.new(:title => "Harry Potter and the Prisoner of Azkaban", :author => "Joanne K. Rowling"),
12
- Book.new(:title => "Harry Potter and the Goblet of Fire", :author => "Joanne K. Rowling"),
13
- Book.new(:title => "Harry Potter and the Order of the Phoenix", :author => "Joanne K. Rowling"),
14
- Book.new(:title => "Harry Potter and the Half-blood Prince", :author => "Joanne K. Rowling"),
15
- Book.new(:title => "Harry Potter and the Deathly Hallows", :author => "Joanne K. Rowling"),
16
- Book.new(:title => "The Magician's Guild", :author => "Trudi Canavan")
17
- ].each do |book|
18
- book.save
19
- end
8
+ RootedBook.clear
9
+ RootedBook.create(:title => "Harry Potter and the Philosopher's stone", :author => "Joanne K. Rowling")
10
+ RootedBook.create(:title => "The Hobbit", :author => "J. R. R. Tolkien")
11
+ RootedBook.create(:title => "The Lord of the Rings", :author => "J. R. R. Tolkien")
12
+ RootedBook.create(:title => "Charlie and the Chocolate Factory", :author => "Roald Dahl")
13
+ RootedBook.create(:title => "A Christmas Carol", :author => "Charles Dickens")
20
14
  end
21
15
 
22
- def teardown
23
- Book.clear
16
+ def test_all_returns_all_books
17
+ all_books = RootedBook.all
18
+ assert_equal all_books.class, Array
19
+ assert_equal all_books.size, 5
24
20
  end
25
21
 
26
22
  def test_size_returns_correct_amount_of_books
27
- assert_equal Book.size, 8
28
- end
29
-
30
- def test_clear_clears_the_database
31
- assert Book.size > 0
32
- Book.clear
33
- assert Book.size == 0
23
+ assert_equal RootedBook.size, 5
34
24
  end
35
25
 
36
26
  def test_first_returns_the_first_book
37
- assert Book.first.title.include? "Philosopher"
27
+ assert RootedBook.first.title.include? "Philosopher"
38
28
  end
39
29
 
40
30
  def test_normal_enumerable_methods_work
41
- assert_equal 7, Book.count { |b| b.author == "Joanne K. Rowling" }
31
+ assert_equal 2, RootedBook.count { |b| b.author == "J. R. R. Tolkien" }
42
32
  end
43
33
 
44
34
  def test_work_on_real_objects
45
- book = Book.first
35
+ book = RootedBook.first
46
36
  book.author = "William Shakespeare"
47
- assert_equal Book.first.author, "William Shakespeare"
37
+ assert_equal RootedBook.first.author, "William Shakespeare"
38
+ end
39
+
40
+ def test_find_object_by_id
41
+ book = RootedBook.all[2]
42
+ assert_equal book, RootedBook.find_by_objectid(book.object_id)
48
43
  end
49
44
 
50
45
  end
@@ -0,0 +1,38 @@
1
+ require "more_asserts"
2
+ require "maglev_record"
3
+
4
+ class User
5
+ include MaglevRecord::RootedBase
6
+ attr_accessor :password_digest
7
+
8
+ has_secure_password
9
+ # TODO: No validations so far
10
+ # validates_presence_of :password, :on => :create
11
+ end
12
+
13
+ class SensibleTest #< Test::Unit::TestCase
14
+
15
+ def pass
16
+ "some_pass"
17
+ end
18
+
19
+ def example_user
20
+ attr_hash = {
21
+ :password => pass,
22
+ :password_confirmation => pass,
23
+ }
24
+ User.new(attr_hash)
25
+ end
26
+
27
+ def test_sensible_deletion
28
+ user = example_user
29
+
30
+ assert_equal user.password, pass
31
+ assert_equal user.password_confirmation, pass
32
+
33
+ user.clear_sensibles
34
+
35
+ assert_equal user.password, nil
36
+ assert_equal user.password_confirmation, nil
37
+ end
38
+ end
@@ -1,81 +1,44 @@
1
- require "test/unit"
1
+ require "more_asserts"
2
2
  require "maglev_record"
3
3
  require "example_model"
4
4
 
5
5
  class ValidationTest < Test::Unit::TestCase
6
6
 
7
7
  def setup
8
- [
9
- Book.new(:title => "Harry Potter and the Philosopher's stone", :author => "Joanne K. Rowling"),
10
- Book.new(:title => "Harry Potter and the Chamber of Secrets", :author => "Joanne K. Rowling")
11
- ].each do |book|
12
- book.save
13
- end
8
+ MaglevRecord.reset
9
+ RootedBook.clear
10
+ MaglevRecord.save
14
11
  end
15
12
 
16
- def teardown
17
- Book.clear
18
- end
19
-
20
- def test_reset_single_attribute
21
- book = Book.find { |b| b.title == "Harry Potter and the Philosopher's stone" }
22
- book.author = "J. R. R. Tolkien"
23
- book.reset_author!
24
- assert_equal book.author, "Joanne K. Rowling"
25
- end
13
+ # TODO
14
+ # def test_reset
15
+ # book = Book.find { |b| b.title == "Harry Potter and the Philosopher's stone" }
16
+ # book.author = "J. R. R. Tolkien"
17
+ # book.title = "The Lord of the Rings"
26
18
 
27
- def test_reset_all_attributes
28
- book = Book.find { |b| b.title == "Harry Potter and the Philosopher's stone" }
29
- book.author = "J. R. R. Tolkien"
30
- book.title = "The Lord of the Rings"
31
- #book.reset!
32
- #assert_equal book.author, "Joanne K. Rowling"
33
- #assert_equal book.title, "Harry Potter and the Philosopher's stone"
34
- end
19
+ # MaglevRecord.reset
20
+ # assert_not_nil Book.find { |b| b.title == "Harry Potter and the Philosopher's stone" }
21
+ # end
35
22
 
36
- def invalid_model
37
- Book.new(:author => "J. R. R. Tolkien", :title => "LotR")
23
+ def test_validation_works
24
+ book = RootedBook.new(:author => "Book")
25
+ assert book.valid?
26
+ assert_not book.invalid?
27
+ MaglevRecord.save
38
28
  end
39
29
 
40
30
  def test_validation_fails
41
- book = invalid_model
31
+ book = RootedBook.new()
42
32
  assert !book.valid?
43
33
  assert book.invalid?
34
+ MaglevRecord.save
44
35
  end
45
36
 
46
37
  def test_errors_not_empty
47
- book = invalid_model
38
+ book = RootedBook.new()
48
39
  book.valid?
49
40
  assert book.errors.count > 0
50
41
  end
51
42
 
52
- def test_validation_succeeds
53
- book = Book.new(:author => "J. R. R. Tolkien", :title => "Harry Potter and the Philosopher's stone")
54
- assert book.valid?
55
- assert !book.invalid?
56
- end
57
-
58
- def test_save_excl_invalid_throws_error
59
- book = invalid_model
60
-
61
- @catch = false
62
- begin
63
- book.save!
64
- rescue StandardError
65
- @catch = true
66
- end
67
-
68
- assert @catch
69
- end
70
-
71
- def test_save_invalid_returns_false
72
- book = invalid_model
73
- assert !book.save
74
- end
75
-
76
- def test_save_skip_validation
77
- book = invalid_model
78
- assert book.save(:validate => false)
79
- end
80
43
  end
81
44
 
data/todo.txt ADDED
@@ -0,0 +1 @@
1
+ be rake testslow TEST=/home/nicco/Documents/maglevrecord/test/migration/test_snapshot.rb ; buildtest