ibm_db 3.0.4-x86-mingw32 → 3.0.5-x86-mingw32
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.
- checksums.yaml +4 -4
- data/CHANGES +4 -1
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/README +225 -225
- data/ext/Makefile.nt32 +181 -181
- data/ext/Makefile.nt32.191 +212 -212
- data/ext/extconf.rb +291 -291
- data/ext/ibm_db.c +11887 -11884
- data/ext/ruby_ibm_db.h +241 -241
- data/ext/ruby_ibm_db_cli.c +866 -866
- data/ext/ruby_ibm_db_cli.h +500 -500
- data/init.rb +41 -41
- data/lib/IBM_DB.rb +27 -27
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +122 -122
- data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
- data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +276 -261
- data/test/cases/aggregations_test.rb +158 -158
- data/test/cases/ar_schema_test.rb +161 -161
- data/test/cases/associations/association_scope_test.rb +21 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
- data/test/cases/associations/callbacks_test.rb +192 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1429 -1411
- data/test/cases/associations/extension_test.rb +82 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
- data/test/cases/associations/has_many_associations_test.rb +2182 -2162
- data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
- data/test/cases/associations/has_one_associations_test.rb +610 -610
- data/test/cases/associations/has_one_through_associations_test.rb +380 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +706 -693
- data/test/cases/associations/join_model_test.rb +754 -754
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +82 -82
- data/test/cases/associations_test.rb +380 -380
- data/test/cases/attribute_decorators_test.rb +125 -125
- data/test/cases/attribute_methods/read_test.rb +60 -60
- data/test/cases/attribute_methods/serialization_test.rb +29 -29
- data/test/cases/attribute_methods_test.rb +952 -952
- data/test/cases/attribute_set_test.rb +210 -200
- data/test/cases/attribute_test.rb +180 -180
- data/test/cases/attributes_test.rb +136 -136
- data/test/cases/autosave_association_test.rb +1595 -1595
- data/test/cases/base_test.rb +1664 -1638
- data/test/cases/batches_test.rb +212 -212
- data/test/cases/binary_test.rb +52 -52
- data/test/cases/bind_parameter_test.rb +100 -100
- data/test/cases/calculations_test.rb +646 -646
- data/test/cases/callbacks_test.rb +543 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +123 -123
- data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
- data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
- data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
- data/test/cases/connection_management_test.rb +122 -122
- data/test/cases/connection_pool_test.rb +346 -346
- data/test/cases/connection_specification/resolver_test.rb +116 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +209 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +19 -19
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +223 -223
- data/test/cases/dirty_test.rb +785 -775
- data/test/cases/disconnected_test.rb +28 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +290 -290
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +76 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1169 -1166
- data/test/cases/fixture_set/file_test.rb +138 -138
- data/test/cases/fixtures_test.rb +908 -897
- data/test/cases/forbidden_attributes_protection_test.rb +99 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +210 -210
- data/test/cases/hot_compatibility_test.rb +54 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +375 -375
- data/test/cases/integration_test.rb +139 -139
- data/test/cases/invalid_connection_test.rb +22 -22
- data/test/cases/invalid_date_test.rb +32 -32
- data/test/cases/invertible_migration_test.rb +295 -295
- data/test/cases/json_serialization_test.rb +302 -302
- data/test/cases/locking_test.rb +477 -477
- data/test/cases/log_subscriber_test.rb +136 -136
- data/test/cases/migration/change_schema_test - Copy.rb +448 -448
- data/test/cases/migration/change_schema_test.rb +512 -472
- data/test/cases/migration/change_table_test.rb +224 -224
- data/test/cases/migration/column_attributes_test.rb +192 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +304 -304
- data/test/cases/migration/command_recorder_test.rb +305 -305
- data/test/cases/migration/create_join_table_test.rb +148 -148
- data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
- data/test/cases/migration/foreign_key_test.rb +328 -360
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +216 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +53 -53
- data/test/cases/migration/references_foreign_key_test.rb +169 -214
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +116 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration/table_and_index_test.rb +24 -24
- data/test/cases/migration_test.rb +959 -959
- data/test/cases/migrator_test.rb +388 -388
- data/test/cases/mixin_test.rb +70 -70
- data/test/cases/modules_test.rb +173 -173
- data/test/cases/multiparameter_attributes_test.rb +350 -350
- data/test/cases/multiple_db_test.rb +115 -115
- data/test/cases/nested_attributes_test.rb +1070 -1057
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +909 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +237 -237
- data/test/cases/query_cache_test.rb +326 -326
- data/test/cases/quoting_test.rb +156 -156
- data/test/cases/readonly_test.rb +118 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +463 -454
- data/test/cases/relation/delegation_test.rb +68 -68
- data/test/cases/relation/merging_test.rb +161 -161
- data/test/cases/relation/mutation_test.rb +165 -165
- data/test/cases/relation/predicate_builder_test.rb +14 -14
- data/test/cases/relation/where_chain_test.rb +181 -181
- data/test/cases/relation/where_test.rb +300 -300
- data/test/cases/relation/where_test2.rb +36 -36
- data/test/cases/relation_test.rb +319 -297
- data/test/cases/relations_test.rb +1815 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +80 -80
- data/test/cases/sanitize_test.rb +83 -83
- data/test/cases/schema_dumper_test.rb +463 -463
- data/test/cases/scoping/default_scoping_test.rb +454 -454
- data/test/cases/scoping/named_scoping_test.rb +524 -524
- data/test/cases/scoping/relation_scoping_test.rb +357 -357
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +277 -277
- data/test/cases/statement_cache_test.rb +98 -98
- data/test/cases/store_test.rb +194 -194
- data/test/cases/tasks/database_tasks_test.rb +398 -396
- data/test/cases/tasks/mysql_rake_test.rb +324 -311
- data/test/cases/tasks/postgresql_rake_test.rb +250 -245
- data/test/cases/tasks/sqlite_rake_test.rb +193 -193
- data/test/cases/test_case.rb +123 -123
- data/test/cases/timestamp_test.rb +467 -468
- data/test/cases/transaction_callbacks_test.rb +452 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +817 -817
- data/test/cases/type/decimal_test.rb +56 -51
- data/test/cases/type/integer_test.rb +121 -121
- data/test/cases/type/string_test.rb +36 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type/unsigned_integer_test.rb +18 -18
- data/test/cases/types_test.rb +141 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/association_validation_test.rb +86 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +90 -90
- data/test/cases/validations/length_validation_test.rb +47 -47
- data/test/cases/validations/presence_validation_test.rb +68 -68
- data/test/cases/validations/uniqueness_validation_test.rb +457 -434
- data/test/cases/validations_repair_helper.rb +23 -23
- data/test/cases/validations_test.rb +165 -165
- data/test/cases/view_test.rb +119 -113
- data/test/cases/xml_serialization_test.rb +457 -457
- data/test/cases/yaml_serialization_test.rb +126 -86
- data/test/config.rb +5 -5
- data/test/config.yml +154 -154
- data/test/connections/native_ibm_db/connection.rb +43 -43
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/randomly_named_a9.yml +7 -7
- data/test/fixtures/admin/randomly_named_b0.yml +7 -7
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +11 -11
- data/test/fixtures/bulbs.yml +5 -5
- data/test/fixtures/cars.yml +9 -9
- data/test/fixtures/categories.yml +19 -19
- data/test/fixtures/categories/special_categories.yml +9 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
- data/test/fixtures/categories_ordered.yml +7 -7
- data/test/fixtures/categories_posts.yml +31 -31
- data/test/fixtures/categorizations.yml +23 -23
- data/test/fixtures/clubs.yml +8 -8
- data/test/fixtures/collections.yml +3 -3
- data/test/fixtures/colleges.yml +3 -3
- data/test/fixtures/comments.yml +65 -65
- data/test/fixtures/companies.yml +67 -67
- data/test/fixtures/computers.yml +10 -10
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/developers.yml +21 -21
- data/test/fixtures/developers_projects.yml +16 -16
- data/test/fixtures/dog_lovers.yml +7 -7
- data/test/fixtures/dogs.yml +4 -4
- data/test/fixtures/doubloons.yml +3 -3
- data/test/fixtures/edges.yml +5 -5
- data/test/fixtures/entrants.yml +14 -14
- data/test/fixtures/essays.yml +6 -6
- data/test/fixtures/faces.yml +11 -11
- data/test/fixtures/fk_test_has_fk.yml +3 -3
- data/test/fixtures/fk_test_has_pk.yml +1 -1
- data/test/fixtures/friendships.yml +4 -4
- data/test/fixtures/funny_jokes.yml +10 -10
- data/test/fixtures/interests.yml +33 -33
- data/test/fixtures/items.yml +3 -3
- data/test/fixtures/jobs.yml +7 -7
- data/test/fixtures/legacy_things.yml +3 -3
- data/test/fixtures/mateys.yml +4 -4
- data/test/fixtures/member_details.yml +8 -8
- data/test/fixtures/member_types.yml +6 -6
- data/test/fixtures/members.yml +11 -11
- data/test/fixtures/memberships.yml +34 -34
- data/test/fixtures/men.yml +5 -5
- data/test/fixtures/minimalistics.yml +2 -2
- data/test/fixtures/minivans.yml +5 -5
- data/test/fixtures/mixed_case_monkeys.yml +6 -6
- data/test/fixtures/mixins.yml +29 -29
- data/test/fixtures/movies.yml +7 -7
- data/test/fixtures/naked/csv/accounts.csv +1 -1
- data/test/fixtures/naked/yml/accounts.yml +1 -1
- data/test/fixtures/naked/yml/companies.yml +1 -1
- data/test/fixtures/naked/yml/courses.yml +1 -1
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_topics.yml +42 -42
- data/test/fixtures/owners.yml +9 -9
- data/test/fixtures/parrots.yml +27 -27
- data/test/fixtures/parrots_pirates.yml +7 -7
- data/test/fixtures/people.yml +24 -24
- data/test/fixtures/peoples_treasures.yml +3 -3
- data/test/fixtures/pets.yml +19 -19
- data/test/fixtures/pirates.yml +12 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +7 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.yml +7 -7
- data/test/fixtures/randomly_named_a9.yml +7 -7
- data/test/fixtures/ratings.yml +14 -14
- data/test/fixtures/readers.yml +11 -11
- data/test/fixtures/references.yml +17 -17
- data/test/fixtures/reserved_words/distinct.yml +5 -5
- data/test/fixtures/reserved_words/distinct_select.yml +11 -11
- data/test/fixtures/reserved_words/group.yml +14 -14
- data/test/fixtures/reserved_words/select.yml +8 -8
- data/test/fixtures/reserved_words/values.yml +7 -7
- data/test/fixtures/ships.yml +6 -6
- data/test/fixtures/speedometers.yml +8 -8
- data/test/fixtures/sponsors.yml +12 -12
- data/test/fixtures/string_key_objects.yml +7 -7
- data/test/fixtures/subscribers.yml +10 -10
- data/test/fixtures/subscriptions.yml +12 -12
- data/test/fixtures/taggings.yml +78 -78
- data/test/fixtures/tags.yml +11 -11
- data/test/fixtures/tasks.yml +7 -7
- data/test/fixtures/teapots.yml +3 -3
- data/test/fixtures/to_be_linked/accounts.yml +2 -2
- data/test/fixtures/to_be_linked/users.yml +10 -10
- data/test/fixtures/topics.yml +49 -49
- data/test/fixtures/toys.yml +14 -14
- data/test/fixtures/traffic_lights.yml +9 -9
- data/test/fixtures/treasures.yml +10 -10
- data/test/fixtures/uuid_children.yml +3 -3
- data/test/fixtures/uuid_parents.yml +2 -2
- data/test/fixtures/variants.yml +4 -4
- data/test/fixtures/vegetables.yml +19 -19
- data/test/fixtures/vertices.yml +3 -3
- data/test/fixtures/warehouse_things.yml +2 -2
- data/test/fixtures/zines.yml +5 -5
- data/test/ibm_db_test.rb +24 -24
- data/test/migrations/10_urban/9_add_expressions.rb +11 -11
- data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
- data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
- data/test/migrations/missing/1_people_have_last_names.rb +8 -8
- data/test/migrations/missing/3_we_need_reminders.rb +11 -11
- data/test/migrations/missing/4_innocent_jointable.rb +11 -11
- data/test/migrations/rename/1_we_need_things.rb +10 -10
- data/test/migrations/rename/2_rename_things.rb +8 -8
- data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy2/1_create_articles.rb +7 -7
- data/test/migrations/to_copy2/2_create_comments.rb +7 -7
- data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
- data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
- data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
- data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
- data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
- data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
- data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
- data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
- data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
- data/test/models/admin.rb +4 -4
- data/test/models/admin/account.rb +2 -2
- data/test/models/admin/randomly_named_c1.rb +3 -3
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +4 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +212 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +1 -1
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +18 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +51 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +26 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +7 -3
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +23 -23
- data/test/models/college.rb +10 -10
- data/test/models/column.rb +3 -3
- data/test/models/column_name.rb +3 -3
- data/test/models/comment.rb +64 -64
- data/test/models/company.rb +228 -225
- data/test/models/company_in_module.rb +98 -98
- data/test/models/computer.rb +3 -3
- data/test/models/contact.rb +41 -41
- data/test/models/contract.rb +20 -20
- data/test/models/country.rb +7 -7
- data/test/models/course.rb +6 -6
- data/test/models/customer.rb +77 -77
- data/test/models/customer_carrier.rb +14 -14
- data/test/models/dashboard.rb +3 -3
- data/test/models/default.rb +2 -2
- data/test/models/department.rb +4 -4
- data/test/models/developer.rb +255 -252
- data/test/models/dog.rb +5 -5
- data/test/models/dog_lover.rb +5 -5
- data/test/models/doubloon.rb +12 -12
- data/test/models/drink_designer.rb +3 -3
- data/test/models/edge.rb +5 -5
- data/test/models/electron.rb +5 -5
- data/test/models/engine.rb +4 -4
- data/test/models/entrant.rb +3 -3
- data/test/models/essay.rb +5 -5
- data/test/models/event.rb +2 -2
- data/test/models/eye.rb +37 -37
- data/test/models/face.rb +9 -9
- data/test/models/friendship.rb +6 -6
- data/test/models/guid.rb +1 -1
- data/test/models/hotel.rb +9 -6
- data/test/models/image.rb +3 -3
- data/test/models/interest.rb +5 -5
- data/test/models/invoice.rb +4 -4
- data/test/models/item.rb +7 -7
- data/test/models/job.rb +7 -7
- data/test/models/joke.rb +7 -7
- data/test/models/keyboard.rb +3 -3
- data/test/models/legacy_thing.rb +3 -3
- data/test/models/lesson.rb +11 -11
- data/test/models/line_item.rb +3 -3
- data/test/models/liquid.rb +4 -4
- data/test/models/man.rb +11 -11
- data/test/models/matey.rb +4 -4
- data/test/models/member.rb +41 -41
- data/test/models/member_detail.rb +7 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/minimalistic.rb +2 -2
- data/test/models/minivan.rb +9 -9
- data/test/models/mixed_case_monkey.rb +3 -3
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/owner.rb +34 -34
- data/test/models/parrot.rb +29 -29
- data/test/models/person.rb +143 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +15 -15
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +264 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +31 -29
- data/test/models/publisher.rb +2 -2
- data/test/models/publisher/article.rb +4 -4
- data/test/models/publisher/magazine.rb +3 -3
- data/test/models/randomly_named_c1.rb +3 -3
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/record.rb +2 -2
- data/test/models/reference.rb +22 -22
- data/test/models/reply.rb +61 -61
- data/test/models/ship.rb +33 -33
- data/test/models/ship_part.rb +7 -7
- data/test/models/shop.rb +17 -17
- data/test/models/shop_account.rb +6 -6
- data/test/models/speedometer.rb +6 -6
- data/test/models/sponsor.rb +7 -7
- data/test/models/string_key_object.rb +3 -3
- data/test/models/student.rb +4 -4
- data/test/models/subject.rb +16 -16
- data/test/models/subscriber.rb +8 -8
- data/test/models/subscription.rb +4 -4
- data/test/models/tag.rb +7 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +124 -124
- data/test/models/toy.rb +6 -6
- data/test/models/traffic_light.rb +4 -4
- data/test/models/treasure.rb +14 -14
- data/test/models/treaty.rb +7 -7
- data/test/models/tyre.rb +11 -11
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_parent.rb +3 -3
- data/test/models/vegetables.rb +24 -24
- data/test/models/vehicle.rb +6 -6
- data/test/models/vertex.rb +9 -9
- data/test/models/warehouse_thing.rb +5 -5
- data/test/models/wheel.rb +3 -3
- data/test/models/without_table.rb +3 -3
- data/test/models/zine.rb +3 -3
- data/test/schema/mysql2_specific_schema.rb +58 -58
- data/test/schema/mysql_specific_schema.rb +70 -70
- data/test/schema/oracle_specific_schema.rb +43 -43
- data/test/schema/postgresql_specific_schema.rb +202 -202
- data/test/schema/schema.rb +952 -938
- data/test/schema/sqlite_specific_schema.rb +21 -21
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +22 -22
- data/test/support/connection_helper.rb +14 -14
- data/test/support/ddl_helper.rb +8 -8
- data/test/support/schema_dumping_helper.rb +20 -20
- metadata +2 -2
@@ -1,99 +1,99 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
3
|
-
require 'models/person'
|
4
|
-
require 'models/company'
|
5
|
-
|
6
|
-
class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
|
7
|
-
attr_accessor :permitted
|
8
|
-
alias :permitted? :permitted
|
9
|
-
|
10
|
-
def initialize(attributes)
|
11
|
-
super(attributes)
|
12
|
-
@permitted = false
|
13
|
-
end
|
14
|
-
|
15
|
-
def permit!
|
16
|
-
@permitted = true
|
17
|
-
self
|
18
|
-
end
|
19
|
-
|
20
|
-
def dup
|
21
|
-
super.tap do |duplicate|
|
22
|
-
duplicate.instance_variable_set :@permitted, @permitted
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
|
28
|
-
def test_forbidden_attributes_cannot_be_used_for_mass_assignment
|
29
|
-
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
30
|
-
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
31
|
-
Person.new(params)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_permitted_attributes_can_be_used_for_mass_assignment
|
36
|
-
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
37
|
-
params.permit!
|
38
|
-
person = Person.new(params)
|
39
|
-
|
40
|
-
assert_equal 'Guille', person.first_name
|
41
|
-
assert_equal 'm', person.gender
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_forbidden_attributes_cannot_be_used_for_sti_inheritance_column
|
45
|
-
params = ProtectedParams.new(type: 'Client')
|
46
|
-
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
47
|
-
Company.new(params)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_permitted_attributes_can_be_used_for_sti_inheritance_column
|
52
|
-
params = ProtectedParams.new(type: 'Client')
|
53
|
-
params.permit!
|
54
|
-
person = Company.new(params)
|
55
|
-
assert_equal person.class, Client
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_regular_hash_should_still_be_used_for_mass_assignment
|
59
|
-
person = Person.new(first_name: 'Guille', gender: 'm')
|
60
|
-
|
61
|
-
assert_equal 'Guille', person.first_name
|
62
|
-
assert_equal 'm', person.gender
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_blank_attributes_should_not_raise
|
66
|
-
person = Person.new
|
67
|
-
assert_nil person.assign_attributes(ProtectedParams.new({}))
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_create_with_checks_permitted
|
71
|
-
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
72
|
-
|
73
|
-
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
74
|
-
Person.create_with(params).create!
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_create_with_works_with_params_values
|
79
|
-
params = ProtectedParams.new(first_name: 'Guille')
|
80
|
-
|
81
|
-
person = Person.create_with(first_name: params[:first_name]).create!
|
82
|
-
assert_equal 'Guille', person.first_name
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_where_checks_permitted
|
86
|
-
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
87
|
-
|
88
|
-
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
89
|
-
Person.where(params).create!
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_where_works_with_params_values
|
94
|
-
params = ProtectedParams.new(first_name: 'Guille')
|
95
|
-
|
96
|
-
person = Person.where(first_name: params[:first_name]).create!
|
97
|
-
assert_equal 'Guille', person.first_name
|
98
|
-
end
|
99
|
-
end
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
3
|
+
require 'models/person'
|
4
|
+
require 'models/company'
|
5
|
+
|
6
|
+
class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
|
7
|
+
attr_accessor :permitted
|
8
|
+
alias :permitted? :permitted
|
9
|
+
|
10
|
+
def initialize(attributes)
|
11
|
+
super(attributes)
|
12
|
+
@permitted = false
|
13
|
+
end
|
14
|
+
|
15
|
+
def permit!
|
16
|
+
@permitted = true
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def dup
|
21
|
+
super.tap do |duplicate|
|
22
|
+
duplicate.instance_variable_set :@permitted, @permitted
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
|
28
|
+
def test_forbidden_attributes_cannot_be_used_for_mass_assignment
|
29
|
+
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
30
|
+
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
31
|
+
Person.new(params)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_permitted_attributes_can_be_used_for_mass_assignment
|
36
|
+
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
37
|
+
params.permit!
|
38
|
+
person = Person.new(params)
|
39
|
+
|
40
|
+
assert_equal 'Guille', person.first_name
|
41
|
+
assert_equal 'm', person.gender
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_forbidden_attributes_cannot_be_used_for_sti_inheritance_column
|
45
|
+
params = ProtectedParams.new(type: 'Client')
|
46
|
+
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
47
|
+
Company.new(params)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_permitted_attributes_can_be_used_for_sti_inheritance_column
|
52
|
+
params = ProtectedParams.new(type: 'Client')
|
53
|
+
params.permit!
|
54
|
+
person = Company.new(params)
|
55
|
+
assert_equal person.class, Client
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_regular_hash_should_still_be_used_for_mass_assignment
|
59
|
+
person = Person.new(first_name: 'Guille', gender: 'm')
|
60
|
+
|
61
|
+
assert_equal 'Guille', person.first_name
|
62
|
+
assert_equal 'm', person.gender
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_blank_attributes_should_not_raise
|
66
|
+
person = Person.new
|
67
|
+
assert_nil person.assign_attributes(ProtectedParams.new({}))
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_create_with_checks_permitted
|
71
|
+
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
72
|
+
|
73
|
+
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
74
|
+
Person.create_with(params).create!
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_create_with_works_with_params_values
|
79
|
+
params = ProtectedParams.new(first_name: 'Guille')
|
80
|
+
|
81
|
+
person = Person.create_with(first_name: params[:first_name]).create!
|
82
|
+
assert_equal 'Guille', person.first_name
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_where_checks_permitted
|
86
|
+
params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
|
87
|
+
|
88
|
+
assert_raises(ActiveModel::ForbiddenAttributesError) do
|
89
|
+
Person.where(params).create!
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_where_works_with_params_values
|
94
|
+
params = ProtectedParams.new(first_name: 'Guille')
|
95
|
+
|
96
|
+
person = Person.where(first_name: params[:first_name]).create!
|
97
|
+
assert_equal 'Guille', person.first_name
|
98
|
+
end
|
99
|
+
end
|
@@ -1,61 +1,61 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require "models/lesson"
|
3
|
-
require "models/student"
|
4
|
-
|
5
|
-
class HabtmDestroyOrderTest < ActiveRecord::TestCase
|
6
|
-
test "may not delete a lesson with students" do
|
7
|
-
sicp = Lesson.new(:name => "SICP")
|
8
|
-
ben = Student.new(:name => "Ben Bitdiddle")
|
9
|
-
sicp.students << ben
|
10
|
-
sicp.save!
|
11
|
-
assert_raises LessonError do
|
12
|
-
assert_no_difference('Lesson.count') do
|
13
|
-
sicp.destroy
|
14
|
-
end
|
15
|
-
end
|
16
|
-
assert !sicp.destroyed?
|
17
|
-
end
|
18
|
-
|
19
|
-
test 'should not raise error if have foreign key in the join table' do
|
20
|
-
student = Student.new(:name => "Ben Bitdiddle")
|
21
|
-
lesson = Lesson.new(:name => "SICP")
|
22
|
-
lesson.students << student
|
23
|
-
lesson.save!
|
24
|
-
assert_nothing_raised do
|
25
|
-
student.destroy
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
test "not destroying a student with lessons leaves student<=>lesson association intact" do
|
30
|
-
# test a normal before_destroy doesn't destroy the habtm joins
|
31
|
-
begin
|
32
|
-
sicp = Lesson.new(:name => "SICP")
|
33
|
-
ben = Student.new(:name => "Ben Bitdiddle")
|
34
|
-
# add a before destroy to student
|
35
|
-
Student.class_eval do
|
36
|
-
before_destroy do
|
37
|
-
raise ActiveRecord::Rollback unless lessons.empty?
|
38
|
-
end
|
39
|
-
end
|
40
|
-
ben.lessons << sicp
|
41
|
-
ben.save!
|
42
|
-
ben.destroy
|
43
|
-
assert !ben.reload.lessons.empty?
|
44
|
-
ensure
|
45
|
-
# get rid of it so Student is still like it was
|
46
|
-
Student.reset_callbacks(:destroy)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
test "not destroying a lesson with students leaves student<=>lesson association intact" do
|
51
|
-
# test a more aggressive before_destroy doesn't destroy the habtm joins and still throws the exception
|
52
|
-
sicp = Lesson.new(:name => "SICP")
|
53
|
-
ben = Student.new(:name => "Ben Bitdiddle")
|
54
|
-
sicp.students << ben
|
55
|
-
sicp.save!
|
56
|
-
assert_raises LessonError do
|
57
|
-
sicp.destroy
|
58
|
-
end
|
59
|
-
assert !sicp.reload.students.empty?
|
60
|
-
end
|
61
|
-
end
|
1
|
+
require "cases/helper"
|
2
|
+
require "models/lesson"
|
3
|
+
require "models/student"
|
4
|
+
|
5
|
+
class HabtmDestroyOrderTest < ActiveRecord::TestCase
|
6
|
+
test "may not delete a lesson with students" do
|
7
|
+
sicp = Lesson.new(:name => "SICP")
|
8
|
+
ben = Student.new(:name => "Ben Bitdiddle")
|
9
|
+
sicp.students << ben
|
10
|
+
sicp.save!
|
11
|
+
assert_raises LessonError do
|
12
|
+
assert_no_difference('Lesson.count') do
|
13
|
+
sicp.destroy
|
14
|
+
end
|
15
|
+
end
|
16
|
+
assert !sicp.destroyed?
|
17
|
+
end
|
18
|
+
|
19
|
+
test 'should not raise error if have foreign key in the join table' do
|
20
|
+
student = Student.new(:name => "Ben Bitdiddle")
|
21
|
+
lesson = Lesson.new(:name => "SICP")
|
22
|
+
lesson.students << student
|
23
|
+
lesson.save!
|
24
|
+
assert_nothing_raised do
|
25
|
+
student.destroy
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
test "not destroying a student with lessons leaves student<=>lesson association intact" do
|
30
|
+
# test a normal before_destroy doesn't destroy the habtm joins
|
31
|
+
begin
|
32
|
+
sicp = Lesson.new(:name => "SICP")
|
33
|
+
ben = Student.new(:name => "Ben Bitdiddle")
|
34
|
+
# add a before destroy to student
|
35
|
+
Student.class_eval do
|
36
|
+
before_destroy do
|
37
|
+
raise ActiveRecord::Rollback unless lessons.empty?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
ben.lessons << sicp
|
41
|
+
ben.save!
|
42
|
+
ben.destroy
|
43
|
+
assert !ben.reload.lessons.empty?
|
44
|
+
ensure
|
45
|
+
# get rid of it so Student is still like it was
|
46
|
+
Student.reset_callbacks(:destroy)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
test "not destroying a lesson with students leaves student<=>lesson association intact" do
|
51
|
+
# test a more aggressive before_destroy doesn't destroy the habtm joins and still throws the exception
|
52
|
+
sicp = Lesson.new(:name => "SICP")
|
53
|
+
ben = Student.new(:name => "Ben Bitdiddle")
|
54
|
+
sicp.students << ben
|
55
|
+
sicp.save!
|
56
|
+
assert_raises LessonError do
|
57
|
+
sicp.destroy
|
58
|
+
end
|
59
|
+
assert !sicp.reload.students.empty?
|
60
|
+
end
|
61
|
+
end
|
data/test/cases/helper.rb
CHANGED
@@ -1,210 +1,210 @@
|
|
1
|
-
require File.expand_path('../../../../load_paths', __FILE__)
|
2
|
-
|
3
|
-
require 'config'
|
4
|
-
|
5
|
-
require 'active_support/testing/autorun'
|
6
|
-
require 'stringio'
|
7
|
-
|
8
|
-
require 'active_record'
|
9
|
-
require 'cases/test_case'
|
10
|
-
require 'active_support/dependencies'
|
11
|
-
require 'active_support/logger'
|
12
|
-
require 'active_support/core_ext/string/strip'
|
13
|
-
|
14
|
-
require 'support/config'
|
15
|
-
require 'support/connection'
|
16
|
-
|
17
|
-
# TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
|
18
|
-
|
19
|
-
Thread.abort_on_exception = true
|
20
|
-
|
21
|
-
# Show backtraces for deprecated behavior for quicker cleanup.
|
22
|
-
ActiveSupport::Deprecation.debug = true
|
23
|
-
|
24
|
-
# Disable available locale checks to avoid warnings running the test suite.
|
25
|
-
I18n.enforce_available_locales = false
|
26
|
-
|
27
|
-
# Enable raise errors in after_commit and after_rollback.
|
28
|
-
ActiveRecord::Base.raise_in_transactional_callbacks = true
|
29
|
-
|
30
|
-
# Connect to the database
|
31
|
-
ARTest.connect
|
32
|
-
|
33
|
-
# Quote "type" if it's a reserved word for the current connection.
|
34
|
-
QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
|
35
|
-
|
36
|
-
def current_adapter?(*types)
|
37
|
-
types.any? do |type|
|
38
|
-
ActiveRecord::ConnectionAdapters.const_defined?(type) &&
|
39
|
-
ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def in_memory_db?
|
44
|
-
current_adapter?(:SQLite3Adapter) &&
|
45
|
-
ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
|
46
|
-
end
|
47
|
-
|
48
|
-
def mysql_56?
|
49
|
-
current_adapter?(:Mysql2Adapter) &&
|
50
|
-
ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0"
|
51
|
-
end
|
52
|
-
|
53
|
-
def mysql_enforcing_gtid_consistency?
|
54
|
-
current_adapter?(:MysqlAdapter, :Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
|
55
|
-
end
|
56
|
-
|
57
|
-
def supports_savepoints?
|
58
|
-
ActiveRecord::Base.connection.supports_savepoints?
|
59
|
-
end
|
60
|
-
|
61
|
-
def with_env_tz(new_tz = 'US/Eastern')
|
62
|
-
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
63
|
-
yield
|
64
|
-
ensure
|
65
|
-
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
|
66
|
-
end
|
67
|
-
|
68
|
-
def with_timezone_config(cfg)
|
69
|
-
verify_default_timezone_config
|
70
|
-
|
71
|
-
old_default_zone = ActiveRecord::Base.default_timezone
|
72
|
-
old_awareness = ActiveRecord::Base.time_zone_aware_attributes
|
73
|
-
old_zone = Time.zone
|
74
|
-
|
75
|
-
if cfg.has_key?(:default)
|
76
|
-
ActiveRecord::Base.default_timezone = cfg[:default]
|
77
|
-
end
|
78
|
-
if cfg.has_key?(:aware_attributes)
|
79
|
-
ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
|
80
|
-
end
|
81
|
-
if cfg.has_key?(:zone)
|
82
|
-
Time.zone = cfg[:zone]
|
83
|
-
end
|
84
|
-
yield
|
85
|
-
ensure
|
86
|
-
ActiveRecord::Base.default_timezone = old_default_zone
|
87
|
-
ActiveRecord::Base.time_zone_aware_attributes = old_awareness
|
88
|
-
Time.zone = old_zone
|
89
|
-
end
|
90
|
-
|
91
|
-
# This method makes sure that tests don't leak global state related to time zones.
|
92
|
-
EXPECTED_ZONE = nil
|
93
|
-
EXPECTED_DEFAULT_TIMEZONE = :utc
|
94
|
-
EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
|
95
|
-
def verify_default_timezone_config
|
96
|
-
if Time.zone != EXPECTED_ZONE
|
97
|
-
$stderr.puts <<-MSG
|
98
|
-
\n#{self}
|
99
|
-
Global state `Time.zone` was leaked.
|
100
|
-
Expected: #{EXPECTED_ZONE}
|
101
|
-
Got: #{Time.zone}
|
102
|
-
MSG
|
103
|
-
end
|
104
|
-
if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
|
105
|
-
$stderr.puts <<-MSG
|
106
|
-
\n#{self}
|
107
|
-
Global state `ActiveRecord::Base.default_timezone` was leaked.
|
108
|
-
Expected: #{EXPECTED_DEFAULT_TIMEZONE}
|
109
|
-
Got: #{ActiveRecord::Base.default_timezone}
|
110
|
-
MSG
|
111
|
-
end
|
112
|
-
if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
|
113
|
-
$stderr.puts <<-MSG
|
114
|
-
\n#{self}
|
115
|
-
Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
|
116
|
-
Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
|
117
|
-
Got: #{ActiveRecord::Base.time_zone_aware_attributes}
|
118
|
-
MSG
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
def enable_extension!(extension, connection)
|
123
|
-
return false unless connection.supports_extensions?
|
124
|
-
return connection.reconnect! if connection.extension_enabled?(extension)
|
125
|
-
|
126
|
-
connection.enable_extension extension
|
127
|
-
connection.commit_db_transaction
|
128
|
-
connection.reconnect!
|
129
|
-
end
|
130
|
-
|
131
|
-
def disable_extension!(extension, connection)
|
132
|
-
return false unless connection.supports_extensions?
|
133
|
-
return true unless connection.extension_enabled?(extension)
|
134
|
-
|
135
|
-
connection.disable_extension extension
|
136
|
-
connection.reconnect!
|
137
|
-
end
|
138
|
-
|
139
|
-
require "cases/validations_repair_helper"
|
140
|
-
class ActiveSupport::TestCase
|
141
|
-
include ActiveRecord::TestFixtures
|
142
|
-
include ActiveRecord::ValidationsRepairHelper
|
143
|
-
|
144
|
-
self.fixture_path = FIXTURES_ROOT
|
145
|
-
self.use_instantiated_fixtures = false
|
146
|
-
self.use_transactional_fixtures = true
|
147
|
-
|
148
|
-
def create_fixtures(*fixture_set_names, &block)
|
149
|
-
ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def load_schema
|
154
|
-
# silence verbose schema loading
|
155
|
-
original_stdout = $stdout
|
156
|
-
$stdout = StringIO.new
|
157
|
-
|
158
|
-
adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
|
159
|
-
adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
|
160
|
-
|
161
|
-
load SCHEMA_ROOT + "/schema.rb"
|
162
|
-
|
163
|
-
if File.exist?(adapter_specific_schema_file)
|
164
|
-
load adapter_specific_schema_file
|
165
|
-
end
|
166
|
-
ensure
|
167
|
-
$stdout = original_stdout
|
168
|
-
end
|
169
|
-
|
170
|
-
load_schema
|
171
|
-
|
172
|
-
class SQLSubscriber
|
173
|
-
attr_reader :logged
|
174
|
-
attr_reader :payloads
|
175
|
-
|
176
|
-
def initialize
|
177
|
-
@logged = []
|
178
|
-
@payloads = []
|
179
|
-
end
|
180
|
-
|
181
|
-
def start(name, id, payload)
|
182
|
-
@payloads << payload
|
183
|
-
@logged << [payload[:sql].squish, payload[:name], payload[:binds]]
|
184
|
-
end
|
185
|
-
|
186
|
-
def finish(name, id, payload); end
|
187
|
-
end
|
188
|
-
|
189
|
-
module InTimeZone
|
190
|
-
private
|
191
|
-
|
192
|
-
def in_time_zone(zone)
|
193
|
-
old_zone = Time.zone
|
194
|
-
old_tz = ActiveRecord::Base.time_zone_aware_attributes
|
195
|
-
|
196
|
-
Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
|
197
|
-
ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
|
198
|
-
yield
|
199
|
-
ensure
|
200
|
-
Time.zone = old_zone
|
201
|
-
ActiveRecord::Base.time_zone_aware_attributes = old_tz
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
require 'mocha/setup' # FIXME: stop using mocha
|
206
|
-
|
207
|
-
# FIXME: we have tests that depend on run order, we should fix that and
|
208
|
-
# remove this method call.
|
209
|
-
require 'active_support/test_case'
|
210
|
-
ActiveSupport::TestCase.test_order = :sorted
|
1
|
+
require File.expand_path('../../../../load_paths', __FILE__)
|
2
|
+
|
3
|
+
require 'config'
|
4
|
+
|
5
|
+
require 'active_support/testing/autorun'
|
6
|
+
require 'stringio'
|
7
|
+
|
8
|
+
require 'active_record'
|
9
|
+
require 'cases/test_case'
|
10
|
+
require 'active_support/dependencies'
|
11
|
+
require 'active_support/logger'
|
12
|
+
require 'active_support/core_ext/string/strip'
|
13
|
+
|
14
|
+
require 'support/config'
|
15
|
+
require 'support/connection'
|
16
|
+
|
17
|
+
# TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
|
18
|
+
|
19
|
+
Thread.abort_on_exception = true
|
20
|
+
|
21
|
+
# Show backtraces for deprecated behavior for quicker cleanup.
|
22
|
+
ActiveSupport::Deprecation.debug = true
|
23
|
+
|
24
|
+
# Disable available locale checks to avoid warnings running the test suite.
|
25
|
+
I18n.enforce_available_locales = false
|
26
|
+
|
27
|
+
# Enable raise errors in after_commit and after_rollback.
|
28
|
+
ActiveRecord::Base.raise_in_transactional_callbacks = true
|
29
|
+
|
30
|
+
# Connect to the database
|
31
|
+
ARTest.connect
|
32
|
+
|
33
|
+
# Quote "type" if it's a reserved word for the current connection.
|
34
|
+
QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
|
35
|
+
|
36
|
+
def current_adapter?(*types)
|
37
|
+
types.any? do |type|
|
38
|
+
ActiveRecord::ConnectionAdapters.const_defined?(type) &&
|
39
|
+
ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def in_memory_db?
|
44
|
+
current_adapter?(:SQLite3Adapter) &&
|
45
|
+
ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
|
46
|
+
end
|
47
|
+
|
48
|
+
def mysql_56?
|
49
|
+
current_adapter?(:Mysql2Adapter) &&
|
50
|
+
ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0"
|
51
|
+
end
|
52
|
+
|
53
|
+
def mysql_enforcing_gtid_consistency?
|
54
|
+
current_adapter?(:MysqlAdapter, :Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
|
55
|
+
end
|
56
|
+
|
57
|
+
def supports_savepoints?
|
58
|
+
ActiveRecord::Base.connection.supports_savepoints?
|
59
|
+
end
|
60
|
+
|
61
|
+
def with_env_tz(new_tz = 'US/Eastern')
|
62
|
+
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
63
|
+
yield
|
64
|
+
ensure
|
65
|
+
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
|
66
|
+
end
|
67
|
+
|
68
|
+
def with_timezone_config(cfg)
|
69
|
+
verify_default_timezone_config
|
70
|
+
|
71
|
+
old_default_zone = ActiveRecord::Base.default_timezone
|
72
|
+
old_awareness = ActiveRecord::Base.time_zone_aware_attributes
|
73
|
+
old_zone = Time.zone
|
74
|
+
|
75
|
+
if cfg.has_key?(:default)
|
76
|
+
ActiveRecord::Base.default_timezone = cfg[:default]
|
77
|
+
end
|
78
|
+
if cfg.has_key?(:aware_attributes)
|
79
|
+
ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
|
80
|
+
end
|
81
|
+
if cfg.has_key?(:zone)
|
82
|
+
Time.zone = cfg[:zone]
|
83
|
+
end
|
84
|
+
yield
|
85
|
+
ensure
|
86
|
+
ActiveRecord::Base.default_timezone = old_default_zone
|
87
|
+
ActiveRecord::Base.time_zone_aware_attributes = old_awareness
|
88
|
+
Time.zone = old_zone
|
89
|
+
end
|
90
|
+
|
91
|
+
# This method makes sure that tests don't leak global state related to time zones.
|
92
|
+
EXPECTED_ZONE = nil
|
93
|
+
EXPECTED_DEFAULT_TIMEZONE = :utc
|
94
|
+
EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
|
95
|
+
def verify_default_timezone_config
|
96
|
+
if Time.zone != EXPECTED_ZONE
|
97
|
+
$stderr.puts <<-MSG
|
98
|
+
\n#{self}
|
99
|
+
Global state `Time.zone` was leaked.
|
100
|
+
Expected: #{EXPECTED_ZONE}
|
101
|
+
Got: #{Time.zone}
|
102
|
+
MSG
|
103
|
+
end
|
104
|
+
if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
|
105
|
+
$stderr.puts <<-MSG
|
106
|
+
\n#{self}
|
107
|
+
Global state `ActiveRecord::Base.default_timezone` was leaked.
|
108
|
+
Expected: #{EXPECTED_DEFAULT_TIMEZONE}
|
109
|
+
Got: #{ActiveRecord::Base.default_timezone}
|
110
|
+
MSG
|
111
|
+
end
|
112
|
+
if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
|
113
|
+
$stderr.puts <<-MSG
|
114
|
+
\n#{self}
|
115
|
+
Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
|
116
|
+
Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
|
117
|
+
Got: #{ActiveRecord::Base.time_zone_aware_attributes}
|
118
|
+
MSG
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def enable_extension!(extension, connection)
|
123
|
+
return false unless connection.supports_extensions?
|
124
|
+
return connection.reconnect! if connection.extension_enabled?(extension)
|
125
|
+
|
126
|
+
connection.enable_extension extension
|
127
|
+
connection.commit_db_transaction
|
128
|
+
connection.reconnect!
|
129
|
+
end
|
130
|
+
|
131
|
+
def disable_extension!(extension, connection)
|
132
|
+
return false unless connection.supports_extensions?
|
133
|
+
return true unless connection.extension_enabled?(extension)
|
134
|
+
|
135
|
+
connection.disable_extension extension
|
136
|
+
connection.reconnect!
|
137
|
+
end
|
138
|
+
|
139
|
+
require "cases/validations_repair_helper"
|
140
|
+
class ActiveSupport::TestCase
|
141
|
+
include ActiveRecord::TestFixtures
|
142
|
+
include ActiveRecord::ValidationsRepairHelper
|
143
|
+
|
144
|
+
self.fixture_path = FIXTURES_ROOT
|
145
|
+
self.use_instantiated_fixtures = false
|
146
|
+
self.use_transactional_fixtures = true
|
147
|
+
|
148
|
+
def create_fixtures(*fixture_set_names, &block)
|
149
|
+
ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def load_schema
|
154
|
+
# silence verbose schema loading
|
155
|
+
original_stdout = $stdout
|
156
|
+
$stdout = StringIO.new
|
157
|
+
|
158
|
+
adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
|
159
|
+
adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
|
160
|
+
|
161
|
+
load SCHEMA_ROOT + "/schema.rb"
|
162
|
+
|
163
|
+
if File.exist?(adapter_specific_schema_file)
|
164
|
+
load adapter_specific_schema_file
|
165
|
+
end
|
166
|
+
ensure
|
167
|
+
$stdout = original_stdout
|
168
|
+
end
|
169
|
+
|
170
|
+
load_schema
|
171
|
+
|
172
|
+
class SQLSubscriber
|
173
|
+
attr_reader :logged
|
174
|
+
attr_reader :payloads
|
175
|
+
|
176
|
+
def initialize
|
177
|
+
@logged = []
|
178
|
+
@payloads = []
|
179
|
+
end
|
180
|
+
|
181
|
+
def start(name, id, payload)
|
182
|
+
@payloads << payload
|
183
|
+
@logged << [payload[:sql].squish, payload[:name], payload[:binds]]
|
184
|
+
end
|
185
|
+
|
186
|
+
def finish(name, id, payload); end
|
187
|
+
end
|
188
|
+
|
189
|
+
module InTimeZone
|
190
|
+
private
|
191
|
+
|
192
|
+
def in_time_zone(zone)
|
193
|
+
old_zone = Time.zone
|
194
|
+
old_tz = ActiveRecord::Base.time_zone_aware_attributes
|
195
|
+
|
196
|
+
Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
|
197
|
+
ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
|
198
|
+
yield
|
199
|
+
ensure
|
200
|
+
Time.zone = old_zone
|
201
|
+
ActiveRecord::Base.time_zone_aware_attributes = old_tz
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
require 'mocha/setup' # FIXME: stop using mocha
|
206
|
+
|
207
|
+
# FIXME: we have tests that depend on run order, we should fix that and
|
208
|
+
# remove this method call.
|
209
|
+
require 'active_support/test_case'
|
210
|
+
ActiveSupport::TestCase.test_order = :sorted
|