ibm_db 3.0.5-x86-mingw32 → 4.0.0-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 -0
- data/LICENSE +1 -1
- data/MANIFEST +14 -14
- data/ParameterizedQueries README +6 -6
- data/README +208 -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 -11887
- 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 +3452 -3177
- data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
- data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
- data/lib/mswin32/ibm_db.rb +91 -123
- data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
- data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
- data/test/assets/example.log +1 -1
- data/test/assets/test.txt +1 -1
- data/test/cases/adapter_test.rb +351 -276
- data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
- data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
- data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
- data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
- data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
- data/test/cases/adapters/mysql2/connection_test.rb +210 -0
- data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
- data/test/cases/adapters/mysql2/enum_test.rb +26 -0
- data/test/cases/adapters/mysql2/explain_test.rb +21 -0
- data/test/cases/adapters/mysql2/json_test.rb +195 -0
- data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
- data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
- data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
- data/test/cases/adapters/mysql2/schema_test.rb +126 -0
- data/test/cases/adapters/mysql2/sp_test.rb +36 -0
- data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
- data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
- data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
- data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
- data/test/cases/adapters/postgresql/array_test.rb +339 -0
- data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
- data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
- data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
- data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
- data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
- data/test/cases/adapters/postgresql/citext_test.rb +78 -0
- data/test/cases/adapters/postgresql/collation_test.rb +53 -0
- data/test/cases/adapters/postgresql/composite_test.rb +132 -0
- data/test/cases/adapters/postgresql/connection_test.rb +257 -0
- data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
- data/test/cases/adapters/postgresql/domain_test.rb +47 -0
- data/test/cases/adapters/postgresql/enum_test.rb +91 -0
- data/test/cases/adapters/postgresql/explain_test.rb +20 -0
- data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
- data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
- data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
- data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
- data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
- data/test/cases/adapters/postgresql/integer_test.rb +25 -0
- data/test/cases/adapters/postgresql/json_test.rb +237 -0
- data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
- data/test/cases/adapters/postgresql/money_test.rb +96 -0
- data/test/cases/adapters/postgresql/network_test.rb +94 -0
- data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
- data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
- data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
- data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
- data/test/cases/adapters/postgresql/range_test.rb +343 -0
- data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
- data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
- data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
- data/test/cases/adapters/postgresql/schema_test.rb +597 -0
- data/test/cases/adapters/postgresql/serial_test.rb +154 -0
- data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
- data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
- data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
- data/test/cases/adapters/postgresql/utils_test.rb +62 -0
- data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
- data/test/cases/adapters/postgresql/xml_test.rb +54 -0
- data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
- data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
- data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
- data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
- data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
- data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
- data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
- data/test/cases/aggregations_test.rb +168 -158
- data/test/cases/ar_schema_test.rb +146 -161
- data/test/cases/associations/association_scope_test.rb +16 -21
- data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
- data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
- data/test/cases/associations/callbacks_test.rb +190 -192
- data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
- data/test/cases/associations/eager_singularization_test.rb +148 -148
- data/test/cases/associations/eager_test.rb +1514 -1429
- data/test/cases/associations/extension_test.rb +87 -82
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
- data/test/cases/associations/has_many_associations_test.rb +2501 -2182
- data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
- data/test/cases/associations/has_one_associations_test.rb +707 -610
- data/test/cases/associations/has_one_through_associations_test.rb +383 -380
- data/test/cases/associations/inner_join_association_test.rb +139 -139
- data/test/cases/associations/inverse_associations_test.rb +733 -706
- data/test/cases/associations/join_model_test.rb +777 -754
- data/test/cases/associations/left_outer_join_association_test.rb +88 -0
- data/test/cases/associations/nested_through_associations_test.rb +579 -579
- data/test/cases/associations/required_test.rb +102 -82
- data/test/cases/associations_test.rb +385 -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_test.rb +1009 -952
- data/test/cases/attribute_set_test.rb +270 -210
- data/test/cases/attribute_test.rb +246 -180
- data/test/cases/attributes_test.rb +253 -136
- data/test/cases/autosave_association_test.rb +1708 -1595
- data/test/cases/base_test.rb +1713 -1664
- data/test/cases/batches_test.rb +489 -212
- data/test/cases/binary_test.rb +44 -52
- data/test/cases/bind_parameter_test.rb +110 -100
- data/test/cases/cache_key_test.rb +25 -0
- data/test/cases/calculations_test.rb +798 -646
- data/test/cases/callbacks_test.rb +636 -543
- data/test/cases/clone_test.rb +40 -40
- data/test/cases/coders/json_test.rb +15 -0
- data/test/cases/coders/yaml_column_test.rb +63 -63
- data/test/cases/collection_cache_key_test.rb +115 -0
- data/test/cases/column_alias_test.rb +17 -17
- data/test/cases/column_definition_test.rb +92 -123
- data/test/cases/comment_test.rb +143 -0
- data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
- data/test/cases/connection_adapters/connection_handler_test.rb +160 -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 +255 -293
- data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
- data/test/cases/connection_adapters/quoting_test.rb +13 -13
- data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
- data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
- data/test/cases/connection_management_test.rb +112 -122
- data/test/cases/connection_pool_test.rb +521 -346
- data/test/cases/connection_specification/resolver_test.rb +131 -116
- data/test/cases/core_test.rb +112 -112
- data/test/cases/counter_cache_test.rb +214 -209
- data/test/cases/custom_locking_test.rb +17 -17
- data/test/cases/database_statements_test.rb +34 -19
- data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
- data/test/cases/date_time_precision_test.rb +106 -0
- data/test/cases/date_time_test.rb +61 -61
- data/test/cases/defaults_test.rb +218 -223
- data/test/cases/dirty_test.rb +763 -785
- data/test/cases/disconnected_test.rb +30 -28
- data/test/cases/dup_test.rb +157 -157
- data/test/cases/enum_test.rb +444 -290
- data/test/cases/errors_test.rb +16 -0
- data/test/cases/explain_subscriber_test.rb +64 -64
- data/test/cases/explain_test.rb +87 -76
- data/test/cases/finder_respond_to_test.rb +60 -60
- data/test/cases/finder_test.rb +1294 -1169
- data/test/cases/fixture_set/file_test.rb +156 -138
- data/test/cases/fixtures_test.rb +988 -908
- data/test/cases/forbidden_attributes_protection_test.rb +165 -99
- data/test/cases/habtm_destroy_order_test.rb +61 -61
- data/test/cases/helper.rb +204 -210
- data/test/cases/hot_compatibility_test.rb +142 -54
- data/test/cases/i18n_test.rb +45 -45
- data/test/cases/inheritance_test.rb +606 -375
- data/test/cases/integration_test.rb +155 -139
- data/test/cases/invalid_connection_test.rb +24 -22
- data/test/cases/invertible_migration_test.rb +387 -295
- data/test/cases/json_serialization_test.rb +311 -302
- data/test/cases/locking_test.rb +493 -477
- data/test/cases/log_subscriber_test.rb +225 -136
- data/test/cases/migration/change_schema_test.rb +458 -512
- data/test/cases/migration/change_table_test.rb +256 -224
- data/test/cases/migration/column_attributes_test.rb +176 -192
- data/test/cases/migration/column_positioning_test.rb +56 -56
- data/test/cases/migration/columns_test.rb +310 -304
- data/test/cases/migration/command_recorder_test.rb +350 -305
- data/test/cases/migration/compatibility_test.rb +118 -0
- data/test/cases/migration/create_join_table_test.rb +157 -148
- data/test/cases/migration/foreign_key_test.rb +360 -328
- data/test/cases/migration/helper.rb +39 -39
- data/test/cases/migration/index_test.rb +218 -216
- data/test/cases/migration/logger_test.rb +36 -36
- data/test/cases/migration/pending_migrations_test.rb +52 -53
- data/test/cases/migration/references_foreign_key_test.rb +216 -169
- data/test/cases/migration/references_index_test.rb +101 -101
- data/test/cases/migration/references_statements_test.rb +136 -116
- data/test/cases/migration/rename_table_test.rb +93 -93
- data/test/cases/migration_test.rb +1157 -959
- data/test/cases/migrator_test.rb +470 -388
- data/test/cases/mixin_test.rb +68 -70
- data/test/cases/modules_test.rb +172 -173
- data/test/cases/multiparameter_attributes_test.rb +372 -350
- data/test/cases/multiple_db_test.rb +122 -115
- data/test/cases/nested_attributes_test.rb +1098 -1070
- data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
- data/test/cases/persistence_test.rb +1001 -909
- data/test/cases/pooled_connections_test.rb +81 -81
- data/test/cases/primary_keys_test.rb +376 -237
- data/test/cases/query_cache_test.rb +446 -326
- data/test/cases/quoting_test.rb +202 -156
- data/test/cases/readonly_test.rb +119 -118
- data/test/cases/reaper_test.rb +85 -85
- data/test/cases/reflection_test.rb +509 -463
- data/test/cases/relation/delegation_test.rb +63 -68
- data/test/cases/relation/merging_test.rb +157 -161
- data/test/cases/relation/mutation_test.rb +183 -165
- data/test/cases/relation/or_test.rb +92 -0
- data/test/cases/relation/predicate_builder_test.rb +16 -14
- data/test/cases/relation/record_fetch_warning_test.rb +40 -0
- data/test/cases/relation/where_chain_test.rb +105 -181
- data/test/cases/relation/where_clause_test.rb +182 -0
- data/test/cases/relation/where_test.rb +322 -300
- data/test/cases/relation_test.rb +328 -319
- data/test/cases/relations_test.rb +2026 -1815
- data/test/cases/reload_models_test.rb +22 -22
- data/test/cases/result_test.rb +90 -80
- data/test/cases/sanitize_test.rb +176 -83
- data/test/cases/schema_dumper_test.rb +457 -463
- data/test/cases/schema_loading_test.rb +52 -0
- data/test/cases/scoping/default_scoping_test.rb +528 -454
- data/test/cases/scoping/named_scoping_test.rb +561 -524
- data/test/cases/scoping/relation_scoping_test.rb +400 -357
- data/test/cases/secure_token_test.rb +32 -0
- data/test/cases/serialization_test.rb +104 -104
- data/test/cases/serialized_attribute_test.rb +364 -277
- data/test/cases/statement_cache_test.rb +136 -98
- data/test/cases/store_test.rb +195 -194
- data/test/cases/suppressor_test.rb +63 -0
- data/test/cases/tasks/database_tasks_test.rb +462 -398
- data/test/cases/tasks/mysql_rake_test.rb +345 -324
- data/test/cases/tasks/postgresql_rake_test.rb +304 -250
- data/test/cases/tasks/sqlite_rake_test.rb +220 -193
- data/test/cases/test_case.rb +131 -123
- data/test/cases/test_fixtures_test.rb +36 -0
- data/test/cases/time_precision_test.rb +102 -0
- data/test/cases/timestamp_test.rb +501 -467
- data/test/cases/touch_later_test.rb +121 -0
- data/test/cases/transaction_callbacks_test.rb +518 -452
- data/test/cases/transaction_isolation_test.rb +106 -106
- data/test/cases/transactions_test.rb +834 -817
- data/test/cases/type/adapter_specific_registry_test.rb +133 -0
- data/test/cases/type/date_time_test.rb +14 -0
- data/test/cases/type/integer_test.rb +27 -121
- data/test/cases/type/string_test.rb +22 -36
- data/test/cases/type/type_map_test.rb +177 -177
- data/test/cases/type_test.rb +39 -0
- data/test/cases/types_test.rb +24 -141
- data/test/cases/unconnected_test.rb +33 -33
- data/test/cases/validations/absence_validation_test.rb +73 -0
- data/test/cases/validations/association_validation_test.rb +97 -86
- data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
- data/test/cases/validations/i18n_validation_test.rb +86 -90
- data/test/cases/validations/length_validation_test.rb +79 -47
- data/test/cases/validations/presence_validation_test.rb +103 -68
- data/test/cases/validations/uniqueness_validation_test.rb +548 -457
- data/test/cases/validations_repair_helper.rb +19 -23
- data/test/cases/validations_test.rb +194 -165
- data/test/cases/view_test.rb +216 -119
- data/test/cases/yaml_serialization_test.rb +121 -126
- data/test/config.example.yml +97 -0
- data/test/config.rb +5 -5
- data/test/fixtures/accounts.yml +29 -29
- data/test/fixtures/admin/accounts.yml +2 -2
- data/test/fixtures/admin/users.yml +10 -10
- data/test/fixtures/author_addresses.original +11 -0
- data/test/fixtures/author_addresses.yml +17 -17
- data/test/fixtures/author_favorites.yml +3 -3
- data/test/fixtures/authors.original +17 -0
- data/test/fixtures/authors.yml +23 -23
- data/test/fixtures/bad_posts.yml +9 -0
- data/test/fixtures/binaries.yml +133 -133
- data/test/fixtures/books.yml +31 -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/content.yml +3 -0
- data/test/fixtures/content_positions.yml +3 -0
- data/test/fixtures/courses.yml +8 -8
- data/test/fixtures/customers.yml +25 -25
- data/test/fixtures/dashboards.yml +6 -6
- data/test/fixtures/dead_parrots.yml +5 -0
- data/test/fixtures/developers.yml +22 -22
- 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/live_parrots.yml +4 -0
- 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/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/naked/yml/parrots.yml +2 -0
- data/test/fixtures/naked/yml/trees.yml +3 -0
- data/test/fixtures/nodes.yml +29 -0
- data/test/fixtures/organizations.yml +5 -5
- data/test/fixtures/other_comments.yml +6 -0
- data/test/fixtures/other_dogs.yml +2 -0
- data/test/fixtures/other_posts.yml +7 -0
- 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 +15 -12
- data/test/fixtures/posts.yml +80 -80
- data/test/fixtures/price_estimates.yml +16 -7
- data/test/fixtures/products.yml +4 -4
- data/test/fixtures/projects.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/trees.yml +3 -0
- 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/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 +9 -9
- data/test/migrations/missing/1_people_have_last_names.rb +9 -9
- data/test/migrations/missing/3_we_need_reminders.rb +12 -12
- data/test/migrations/missing/4_innocent_jointable.rb +12 -12
- data/test/migrations/rename/1_we_need_things.rb +11 -11
- data/test/migrations/rename/2_rename_things.rb +9 -9
- 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 +12 -12
- data/test/migrations/valid/3_innocent_jointable.rb +12 -12
- 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 +12 -12
- data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
- 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 +5 -5
- data/test/models/admin/account.rb +3 -3
- data/test/models/admin/randomly_named_c1.rb +6 -2
- data/test/models/admin/user.rb +40 -40
- data/test/models/aircraft.rb +5 -4
- data/test/models/arunit2_model.rb +3 -3
- data/test/models/author.rb +209 -212
- data/test/models/auto_id.rb +4 -4
- data/test/models/autoloadable/extra_firm.rb +2 -2
- data/test/models/binary.rb +2 -2
- data/test/models/bird.rb +12 -12
- data/test/models/book.rb +23 -18
- data/test/models/boolean.rb +2 -2
- data/test/models/bulb.rb +52 -51
- data/test/models/cake_designer.rb +3 -3
- data/test/models/car.rb +29 -26
- data/test/models/carrier.rb +2 -2
- data/test/models/cat.rb +10 -0
- data/test/models/categorization.rb +19 -19
- data/test/models/category.rb +35 -35
- data/test/models/chef.rb +8 -7
- data/test/models/citation.rb +3 -3
- data/test/models/club.rb +25 -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 +76 -64
- data/test/models/company.rb +230 -228
- 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/content.rb +40 -0
- 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 +83 -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 +274 -255
- 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 +3 -3
- 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 +2 -2
- data/test/models/guitar.rb +4 -0
- data/test/models/hotel.rb +11 -9
- 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 +42 -41
- data/test/models/member_detail.rb +8 -7
- data/test/models/member_type.rb +3 -3
- data/test/models/membership.rb +35 -35
- data/test/models/mentor.rb +3 -0
- 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/mocktail_designer.rb +2 -0
- data/test/models/molecule.rb +6 -6
- data/test/models/movie.rb +5 -5
- data/test/models/node.rb +5 -0
- data/test/models/non_primary_key.rb +2 -0
- data/test/models/notification.rb +3 -0
- data/test/models/order.rb +4 -4
- data/test/models/organization.rb +14 -14
- data/test/models/other_dog.rb +5 -0
- data/test/models/owner.rb +37 -34
- data/test/models/parrot.rb +28 -29
- data/test/models/person.rb +142 -143
- data/test/models/personal_legacy_thing.rb +4 -4
- data/test/models/pet.rb +18 -15
- data/test/models/pet_treasure.rb +6 -0
- data/test/models/pirate.rb +92 -92
- data/test/models/possession.rb +3 -3
- data/test/models/post.rb +273 -264
- data/test/models/price_estimate.rb +4 -4
- data/test/models/professor.rb +5 -5
- data/test/models/project.rb +40 -31
- 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 +1 -1
- data/test/models/rating.rb +4 -4
- data/test/models/reader.rb +23 -23
- data/test/models/recipe.rb +3 -0
- 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 +39 -33
- data/test/models/ship_part.rb +8 -8
- 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 +13 -7
- data/test/models/tagging.rb +13 -13
- data/test/models/task.rb +5 -5
- data/test/models/topic.rb +118 -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/tree.rb +3 -0
- data/test/models/tuning_peg.rb +4 -0
- data/test/models/tyre.rb +11 -11
- data/test/models/user.rb +14 -0
- data/test/models/uuid_child.rb +3 -3
- data/test/models/uuid_item.rb +6 -0
- 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 +68 -58
- data/test/schema/oracle_specific_schema.rb +40 -43
- data/test/schema/postgresql_specific_schema.rb +114 -202
- data/test/schema/schema.rb +1057 -952
- data/test/schema/schema.rb.original +1057 -0
- data/test/schema/sqlite_specific_schema.rb +18 -22
- data/test/support/config.rb +43 -43
- data/test/support/connection.rb +23 -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
- data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
- data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
- metadata +129 -28
- data/lib/mswin32/rb19x/ibm_db.so +0 -0
- 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/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
- data/test/cases/attribute_methods/serialization_test.rb +0 -29
- data/test/cases/migration/change_schema_test - Copy.rb +0 -448
- data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
- data/test/cases/migration/table_and_index_test.rb +0 -24
- data/test/cases/relation/where_test2.rb +0 -36
- data/test/cases/type/decimal_test.rb +0 -56
- data/test/cases/type/unsigned_integer_test.rb +0 -18
- data/test/cases/xml_serialization_test.rb +0 -457
- data/test/connections/native_ibm_db/connection.rb +0 -44
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
- data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
- data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
- data/test/schema/mysql_specific_schema.rb +0 -70
- data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
@@ -1,138 +1,156 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
require 'tempfile'
|
3
|
-
|
4
|
-
module ActiveRecord
|
5
|
-
class FixtureSet
|
6
|
-
class FileTest < ActiveRecord::TestCase
|
7
|
-
def test_open
|
8
|
-
fh = File.open(::File.join(FIXTURES_ROOT, "accounts.yml"))
|
9
|
-
assert_equal 6, fh.to_a.length
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_open_with_block
|
13
|
-
called = false
|
14
|
-
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
|
15
|
-
called = true
|
16
|
-
assert_equal 6, fh.to_a.length
|
17
|
-
end
|
18
|
-
assert called, 'block called'
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_names
|
22
|
-
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
|
23
|
-
assert_equal ["signals37",
|
24
|
-
"unknown",
|
25
|
-
"rails_core_account",
|
26
|
-
"last_account",
|
27
|
-
"rails_core_account_2",
|
28
|
-
"odegy_account"].sort, fh.to_a.map(&:first).sort
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_values
|
33
|
-
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
|
34
|
-
assert_equal [1,2,3,4,5,6].sort, fh.to_a.map(&:last).map { |x|
|
35
|
-
x['id']
|
36
|
-
}.sort
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_erb_processing
|
41
|
-
File.open(::File.join(FIXTURES_ROOT, "developers.yml")) do |fh|
|
42
|
-
devs = Array.new(8) { |i| "dev_#{i + 3}" }
|
43
|
-
assert_equal [], devs - fh.to_a.map(&:first)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_empty_file
|
48
|
-
tmp_yaml ['empty', 'yml'], '' do |t|
|
49
|
-
assert_equal [], File.open(t.path) { |fh| fh.to_a }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# A valid YAML file is not necessarily a value Fixture file. Make sure
|
54
|
-
# an exception is raised if the format is not valid Fixture format.
|
55
|
-
def test_wrong_fixture_format_string
|
56
|
-
tmp_yaml ['empty', 'yml'], 'qwerty' do |t|
|
57
|
-
assert_raises(ActiveRecord::Fixture::FormatError) do
|
58
|
-
File.open(t.path) { |fh| fh.to_a }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_wrong_fixture_format_nested
|
64
|
-
tmp_yaml ['empty', 'yml'], 'one: two' do |t|
|
65
|
-
assert_raises(ActiveRecord::Fixture::FormatError) do
|
66
|
-
File.open(t.path) { |fh| fh.to_a }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_render_context_helper
|
72
|
-
ActiveRecord::FixtureSet.context_class.class_eval do
|
73
|
-
def fixture_helper
|
74
|
-
"Fixture helper"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
yaml = "one:\n name: <%= fixture_helper %>\n"
|
78
|
-
tmp_yaml ['curious', 'yml'], yaml do |t|
|
79
|
-
golden =
|
80
|
-
[["one", {"name" => "Fixture helper"}]]
|
81
|
-
assert_equal golden, File.open(t.path) { |fh| fh.to_a }
|
82
|
-
end
|
83
|
-
ActiveRecord::FixtureSet.context_class.class_eval do
|
84
|
-
remove_method :fixture_helper
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_render_context_lookup_scope
|
89
|
-
yaml = <<END
|
90
|
-
one:
|
91
|
-
ActiveRecord: <%= defined? ActiveRecord %>
|
92
|
-
ActiveRecord_FixtureSet: <%= defined? ActiveRecord::FixtureSet %>
|
93
|
-
FixtureSet: <%= defined? FixtureSet %>
|
94
|
-
ActiveRecord_FixtureSet_File: <%= defined? ActiveRecord::FixtureSet::File %>
|
95
|
-
File: <%= File.name %>
|
96
|
-
END
|
97
|
-
|
98
|
-
golden = [['one', {
|
99
|
-
'ActiveRecord' => 'constant',
|
100
|
-
'ActiveRecord_FixtureSet' => 'constant',
|
101
|
-
'FixtureSet' => nil,
|
102
|
-
'ActiveRecord_FixtureSet_File' => 'constant',
|
103
|
-
'File' => 'File'
|
104
|
-
}]]
|
105
|
-
|
106
|
-
tmp_yaml ['curious', 'yml'], yaml do |t|
|
107
|
-
assert_equal golden, File.open(t.path) { |fh| fh.to_a }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# Make sure that each fixture gets its own rendering context so that
|
112
|
-
# fixtures are independent.
|
113
|
-
def test_independent_render_contexts
|
114
|
-
yaml1 = "<% def leaked_method; 'leak'; end %>\n"
|
115
|
-
yaml2 = "one:\n name: <%= leaked_method %>\n"
|
116
|
-
tmp_yaml ['leaky', 'yml'], yaml1 do |t1|
|
117
|
-
tmp_yaml ['curious', 'yml'], yaml2 do |t2|
|
118
|
-
File.open(t1.path) { |fh| fh.to_a }
|
119
|
-
assert_raises(NameError) do
|
120
|
-
File.open(t2.path) { |fh| fh.to_a }
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
module ActiveRecord
|
5
|
+
class FixtureSet
|
6
|
+
class FileTest < ActiveRecord::TestCase
|
7
|
+
def test_open
|
8
|
+
fh = File.open(::File.join(FIXTURES_ROOT, "accounts.yml"))
|
9
|
+
assert_equal 6, fh.to_a.length
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_open_with_block
|
13
|
+
called = false
|
14
|
+
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
|
15
|
+
called = true
|
16
|
+
assert_equal 6, fh.to_a.length
|
17
|
+
end
|
18
|
+
assert called, 'block called'
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_names
|
22
|
+
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
|
23
|
+
assert_equal ["signals37",
|
24
|
+
"unknown",
|
25
|
+
"rails_core_account",
|
26
|
+
"last_account",
|
27
|
+
"rails_core_account_2",
|
28
|
+
"odegy_account"].sort, fh.to_a.map(&:first).sort
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_values
|
33
|
+
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
|
34
|
+
assert_equal [1,2,3,4,5,6].sort, fh.to_a.map(&:last).map { |x|
|
35
|
+
x['id']
|
36
|
+
}.sort
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_erb_processing
|
41
|
+
File.open(::File.join(FIXTURES_ROOT, "developers.yml")) do |fh|
|
42
|
+
devs = Array.new(8) { |i| "dev_#{i + 3}" }
|
43
|
+
assert_equal [], devs - fh.to_a.map(&:first)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_empty_file
|
48
|
+
tmp_yaml ['empty', 'yml'], '' do |t|
|
49
|
+
assert_equal [], File.open(t.path) { |fh| fh.to_a }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# A valid YAML file is not necessarily a value Fixture file. Make sure
|
54
|
+
# an exception is raised if the format is not valid Fixture format.
|
55
|
+
def test_wrong_fixture_format_string
|
56
|
+
tmp_yaml ['empty', 'yml'], 'qwerty' do |t|
|
57
|
+
assert_raises(ActiveRecord::Fixture::FormatError) do
|
58
|
+
File.open(t.path) { |fh| fh.to_a }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_wrong_fixture_format_nested
|
64
|
+
tmp_yaml ['empty', 'yml'], 'one: two' do |t|
|
65
|
+
assert_raises(ActiveRecord::Fixture::FormatError) do
|
66
|
+
File.open(t.path) { |fh| fh.to_a }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_render_context_helper
|
72
|
+
ActiveRecord::FixtureSet.context_class.class_eval do
|
73
|
+
def fixture_helper
|
74
|
+
"Fixture helper"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
yaml = "one:\n name: <%= fixture_helper %>\n"
|
78
|
+
tmp_yaml ['curious', 'yml'], yaml do |t|
|
79
|
+
golden =
|
80
|
+
[["one", {"name" => "Fixture helper"}]]
|
81
|
+
assert_equal golden, File.open(t.path) { |fh| fh.to_a }
|
82
|
+
end
|
83
|
+
ActiveRecord::FixtureSet.context_class.class_eval do
|
84
|
+
remove_method :fixture_helper
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_render_context_lookup_scope
|
89
|
+
yaml = <<END
|
90
|
+
one:
|
91
|
+
ActiveRecord: <%= defined? ActiveRecord %>
|
92
|
+
ActiveRecord_FixtureSet: <%= defined? ActiveRecord::FixtureSet %>
|
93
|
+
FixtureSet: <%= defined? FixtureSet %>
|
94
|
+
ActiveRecord_FixtureSet_File: <%= defined? ActiveRecord::FixtureSet::File %>
|
95
|
+
File: <%= File.name %>
|
96
|
+
END
|
97
|
+
|
98
|
+
golden = [['one', {
|
99
|
+
'ActiveRecord' => 'constant',
|
100
|
+
'ActiveRecord_FixtureSet' => 'constant',
|
101
|
+
'FixtureSet' => nil,
|
102
|
+
'ActiveRecord_FixtureSet_File' => 'constant',
|
103
|
+
'File' => 'File'
|
104
|
+
}]]
|
105
|
+
|
106
|
+
tmp_yaml ['curious', 'yml'], yaml do |t|
|
107
|
+
assert_equal golden, File.open(t.path) { |fh| fh.to_a }
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Make sure that each fixture gets its own rendering context so that
|
112
|
+
# fixtures are independent.
|
113
|
+
def test_independent_render_contexts
|
114
|
+
yaml1 = "<% def leaked_method; 'leak'; end %>\n"
|
115
|
+
yaml2 = "one:\n name: <%= leaked_method %>\n"
|
116
|
+
tmp_yaml ['leaky', 'yml'], yaml1 do |t1|
|
117
|
+
tmp_yaml ['curious', 'yml'], yaml2 do |t2|
|
118
|
+
File.open(t1.path) { |fh| fh.to_a }
|
119
|
+
assert_raises(NameError) do
|
120
|
+
File.open(t2.path) { |fh| fh.to_a }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_removes_fixture_config_row
|
127
|
+
File.open(::File.join(FIXTURES_ROOT, 'other_posts.yml')) do |fh|
|
128
|
+
assert_equal(['second_welcome'], fh.each.map { |name, _| name })
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_extracts_model_class_from_config_row
|
133
|
+
File.open(::File.join(FIXTURES_ROOT, 'other_posts.yml')) do |fh|
|
134
|
+
assert_equal 'Post', fh.model_class
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_erb_filename
|
139
|
+
filename = 'filename.yaml'
|
140
|
+
erb = File.new(filename).send(:prepare_erb, "<% Rails.env %>\n")
|
141
|
+
assert_equal erb.filename, filename
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
def tmp_yaml(name, contents)
|
146
|
+
t = Tempfile.new name
|
147
|
+
t.binmode
|
148
|
+
t.write contents
|
149
|
+
t.close
|
150
|
+
yield t
|
151
|
+
ensure
|
152
|
+
t.close true
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/test/cases/fixtures_test.rb
CHANGED
@@ -1,908 +1,988 @@
|
|
1
|
-
require 'cases/helper'
|
2
|
-
require 'models/admin'
|
3
|
-
require 'models/admin/account'
|
4
|
-
require 'models/admin/randomly_named_c1'
|
5
|
-
require 'models/admin/user'
|
6
|
-
require 'models/binary'
|
7
|
-
require 'models/book'
|
8
|
-
require 'models/bulb'
|
9
|
-
require 'models/category'
|
10
|
-
require 'models/
|
11
|
-
require 'models/
|
12
|
-
require 'models/
|
13
|
-
require 'models/
|
14
|
-
require 'models/
|
15
|
-
require
|
16
|
-
require 'models/
|
17
|
-
require 'models/
|
18
|
-
require 'models/
|
19
|
-
require
|
20
|
-
require 'models/
|
21
|
-
require 'models/
|
22
|
-
require 'models/
|
23
|
-
require 'models/
|
24
|
-
require 'models/
|
25
|
-
require 'models/
|
26
|
-
require 'models/
|
27
|
-
require 'models/
|
28
|
-
require '
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
badyaml.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
ActiveRecord::
|
111
|
-
|
112
|
-
|
113
|
-
t.column :
|
114
|
-
t.column :
|
115
|
-
t.column :
|
116
|
-
t.column :
|
117
|
-
t.column :
|
118
|
-
t.column :
|
119
|
-
t.column :
|
120
|
-
t.column :
|
121
|
-
t.column :
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
ActiveRecord::Base.
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
assert_equal "
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
assert_equal(categories(:sub_special_1).
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
assert_equal(categories(:sub_special_3).
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
data.
|
255
|
-
data.
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
ENV['DATABASE_URL']
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
pt.
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
model
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
model.
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
end
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
assert !defined?(@
|
391
|
-
assert !defined?(@
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
assert_equal
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
end
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
def
|
465
|
-
|
466
|
-
end
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
fixtures
|
548
|
-
#
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
end
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
end
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
class
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
end
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
ActiveRecord::
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
def
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
end
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
assert_equal
|
763
|
-
assert_equal
|
764
|
-
end
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
end
|
840
|
-
|
841
|
-
def
|
842
|
-
assert
|
843
|
-
|
844
|
-
end
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
end
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
def
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
assert_equal
|
885
|
-
end
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
assert_equal
|
907
|
-
end
|
908
|
-
end
|
1
|
+
require 'cases/helper'
|
2
|
+
require 'models/admin'
|
3
|
+
require 'models/admin/account'
|
4
|
+
require 'models/admin/randomly_named_c1'
|
5
|
+
require 'models/admin/user'
|
6
|
+
require 'models/binary'
|
7
|
+
require 'models/book'
|
8
|
+
require 'models/bulb'
|
9
|
+
require 'models/category'
|
10
|
+
require 'models/comment'
|
11
|
+
require 'models/company'
|
12
|
+
require 'models/computer'
|
13
|
+
require 'models/course'
|
14
|
+
require 'models/developer'
|
15
|
+
require "models/dog"
|
16
|
+
require 'models/doubloon'
|
17
|
+
require 'models/joke'
|
18
|
+
require 'models/matey'
|
19
|
+
require "models/other_dog"
|
20
|
+
require 'models/parrot'
|
21
|
+
require 'models/pirate'
|
22
|
+
require 'models/post'
|
23
|
+
require 'models/randomly_named_c1'
|
24
|
+
require 'models/reply'
|
25
|
+
require 'models/ship'
|
26
|
+
require 'models/task'
|
27
|
+
require 'models/topic'
|
28
|
+
require 'models/traffic_light'
|
29
|
+
require 'models/treasure'
|
30
|
+
require 'tempfile'
|
31
|
+
|
32
|
+
class FixturesTest < ActiveRecord::TestCase
|
33
|
+
self.use_instantiated_fixtures = true
|
34
|
+
self.use_transactional_tests = false
|
35
|
+
|
36
|
+
# other_topics fixture should not be included here
|
37
|
+
fixtures :topics, :developers, :accounts, :tasks, :categories, :funny_jokes, :binaries, :traffic_lights
|
38
|
+
|
39
|
+
FIXTURES = %w( accounts binaries companies customers
|
40
|
+
developers developers_projects entrants
|
41
|
+
movies projects subscribers topics tasks )
|
42
|
+
MATCH_ATTRIBUTE_NAME = /[a-zA-Z][-\w]*/
|
43
|
+
|
44
|
+
def test_clean_fixtures
|
45
|
+
FIXTURES.each do |name|
|
46
|
+
fixtures = nil
|
47
|
+
assert_nothing_raised { fixtures = create_fixtures(name).first }
|
48
|
+
assert_kind_of(ActiveRecord::FixtureSet, fixtures)
|
49
|
+
fixtures.each { |_name, fixture|
|
50
|
+
fixture.each { |key, value|
|
51
|
+
assert_match(MATCH_ATTRIBUTE_NAME, key)
|
52
|
+
}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_broken_yaml_exception
|
58
|
+
badyaml = Tempfile.new ['foo', '.yml']
|
59
|
+
badyaml.write 'a: : '
|
60
|
+
badyaml.flush
|
61
|
+
|
62
|
+
dir = File.dirname badyaml.path
|
63
|
+
name = File.basename badyaml.path, '.yml'
|
64
|
+
assert_raises(ActiveRecord::Fixture::FormatError) do
|
65
|
+
ActiveRecord::FixtureSet.create_fixtures(dir, name)
|
66
|
+
end
|
67
|
+
ensure
|
68
|
+
badyaml.close
|
69
|
+
badyaml.unlink
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_create_fixtures
|
73
|
+
fixtures = ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, "parrots")
|
74
|
+
assert Parrot.find_by_name('Curious George'), 'George is not in the database'
|
75
|
+
assert fixtures.detect { |f| f.name == 'parrots' }, "no fixtures named 'parrots' in #{fixtures.map(&:name).inspect}"
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_multiple_clean_fixtures
|
79
|
+
fixtures_array = nil
|
80
|
+
assert_nothing_raised { fixtures_array = create_fixtures(*FIXTURES) }
|
81
|
+
assert_kind_of(Array, fixtures_array)
|
82
|
+
fixtures_array.each { |fixtures| assert_kind_of(ActiveRecord::FixtureSet, fixtures) }
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_create_symbol_fixtures
|
86
|
+
fixtures = ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT, :collections, :collections => Course) { Course.connection }
|
87
|
+
|
88
|
+
assert Course.find_by_name('Collection'), 'course is not in the database'
|
89
|
+
assert fixtures.detect { |f| f.name == 'collections' }, "no fixtures named 'collections' in #{fixtures.map(&:name).inspect}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_attributes
|
93
|
+
topics = create_fixtures("topics").first
|
94
|
+
assert_equal("The First Topic", topics["first"]["title"])
|
95
|
+
assert_nil(topics["second"]["author_email_address"])
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_inserts
|
99
|
+
create_fixtures("topics")
|
100
|
+
first_row = ActiveRecord::Base.connection.select_one("SELECT * FROM topics WHERE author_name = 'David'")
|
101
|
+
assert_equal("The First Topic", first_row["title"])
|
102
|
+
|
103
|
+
second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM topics WHERE author_name = 'Mary'")
|
104
|
+
assert_nil(second_row["author_email_address"])
|
105
|
+
end
|
106
|
+
|
107
|
+
if ActiveRecord::Base.connection.supports_migrations?
|
108
|
+
def test_inserts_with_pre_and_suffix
|
109
|
+
# Reset cache to make finds on the new table work
|
110
|
+
ActiveRecord::FixtureSet.reset_cache
|
111
|
+
|
112
|
+
ActiveRecord::Base.connection.create_table :prefix_other_topics_suffix do |t|
|
113
|
+
t.column :title, :string
|
114
|
+
t.column :author_name, :string
|
115
|
+
t.column :author_email_address, :string
|
116
|
+
t.column :written_on, :datetime
|
117
|
+
t.column :bonus_time, :time
|
118
|
+
t.column :last_read, :date
|
119
|
+
t.column :content, :string
|
120
|
+
t.column :approved, :boolean, :default => true
|
121
|
+
t.column :replies_count, :integer, :default => 0
|
122
|
+
t.column :parent_id, :integer
|
123
|
+
t.column :type, :string, :limit => 50
|
124
|
+
end
|
125
|
+
|
126
|
+
# Store existing prefix/suffix
|
127
|
+
old_prefix = ActiveRecord::Base.table_name_prefix
|
128
|
+
old_suffix = ActiveRecord::Base.table_name_suffix
|
129
|
+
|
130
|
+
# Set a prefix/suffix we can test against
|
131
|
+
ActiveRecord::Base.table_name_prefix = 'prefix_'
|
132
|
+
ActiveRecord::Base.table_name_suffix = '_suffix'
|
133
|
+
|
134
|
+
other_topic_klass = Class.new(ActiveRecord::Base) do
|
135
|
+
def self.name
|
136
|
+
"OtherTopic"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
topics = [create_fixtures("other_topics")].flatten.first
|
141
|
+
|
142
|
+
# This checks for a caching problem which causes a bug in the fixtures
|
143
|
+
# class-level configuration helper.
|
144
|
+
assert_not_nil topics, "Fixture data inserted, but fixture objects not returned from create"
|
145
|
+
|
146
|
+
first_row = ActiveRecord::Base.connection.select_one("SELECT * FROM prefix_other_topics_suffix WHERE author_name = 'David'")
|
147
|
+
assert_not_nil first_row, "The prefix_other_topics_suffix table appears to be empty despite create_fixtures: the row with author_name = 'David' was not found"
|
148
|
+
assert_equal("The First Topic", first_row["title"])
|
149
|
+
|
150
|
+
second_row = ActiveRecord::Base.connection.select_one("SELECT * FROM prefix_other_topics_suffix WHERE author_name = 'Mary'")
|
151
|
+
assert_nil(second_row["author_email_address"])
|
152
|
+
|
153
|
+
assert_equal :prefix_other_topics_suffix, topics.table_name.to_sym
|
154
|
+
# This assertion should preferably be the last in the list, because calling
|
155
|
+
# other_topic_klass.table_name sets a class-level instance variable
|
156
|
+
assert_equal :prefix_other_topics_suffix, other_topic_klass.table_name.to_sym
|
157
|
+
|
158
|
+
ensure
|
159
|
+
# Restore prefix/suffix to its previous values
|
160
|
+
ActiveRecord::Base.table_name_prefix = old_prefix
|
161
|
+
ActiveRecord::Base.table_name_suffix = old_suffix
|
162
|
+
|
163
|
+
ActiveRecord::Base.connection.drop_table :prefix_other_topics_suffix rescue nil
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_insert_with_datetime
|
168
|
+
create_fixtures("tasks")
|
169
|
+
first = Task.find(1)
|
170
|
+
assert first
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_logger_level_invariant
|
174
|
+
level = ActiveRecord::Base.logger.level
|
175
|
+
create_fixtures('topics')
|
176
|
+
assert_equal level, ActiveRecord::Base.logger.level
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_instantiation
|
180
|
+
topics = create_fixtures("topics").first
|
181
|
+
assert_kind_of Topic, topics["first"].find
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_complete_instantiation
|
185
|
+
assert_equal "The First Topic", @first.title
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_fixtures_from_root_yml_with_instantiation
|
189
|
+
assert_equal 50, @unknown.credit_limit
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_erb_in_fixtures
|
193
|
+
assert_equal "fixture_5", @dev_5.name
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_empty_yaml_fixture
|
197
|
+
assert_not_nil ActiveRecord::FixtureSet.new( Account.connection, "accounts", Account, FIXTURES_ROOT + "/naked/yml/accounts")
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_empty_yaml_fixture_with_a_comment_in_it
|
201
|
+
assert_not_nil ActiveRecord::FixtureSet.new( Account.connection, "companies", Company, FIXTURES_ROOT + "/naked/yml/companies")
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_nonexistent_fixture_file
|
205
|
+
nonexistent_fixture_path = FIXTURES_ROOT + "/imnothere"
|
206
|
+
|
207
|
+
#sanity check to make sure that this file never exists
|
208
|
+
assert Dir[nonexistent_fixture_path+"*"].empty?
|
209
|
+
|
210
|
+
assert_raise(Errno::ENOENT) do
|
211
|
+
ActiveRecord::FixtureSet.new( Account.connection, "companies", Company, nonexistent_fixture_path)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_dirty_dirty_yaml_file
|
216
|
+
assert_raise(ActiveRecord::Fixture::FormatError) do
|
217
|
+
ActiveRecord::FixtureSet.new( Account.connection, "courses", Course, FIXTURES_ROOT + "/naked/yml/courses")
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_yaml_file_with_invalid_column
|
222
|
+
e = assert_raise(ActiveRecord::Fixture::FixtureError) do
|
223
|
+
ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT + "/naked/yml", "parrots")
|
224
|
+
end
|
225
|
+
assert_equal(%(table "parrots" has no column named "arrr".), e.message)
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_yaml_file_with_symbol_columns
|
229
|
+
ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT + "/naked/yml", "trees")
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_omap_fixtures
|
233
|
+
assert_nothing_raised do
|
234
|
+
fixtures = ActiveRecord::FixtureSet.new(Account.connection, 'categories', Category, FIXTURES_ROOT + "/categories_ordered")
|
235
|
+
|
236
|
+
fixtures.each.with_index do |(name, fixture), i|
|
237
|
+
assert_equal "fixture_no_#{i}", name
|
238
|
+
assert_equal "Category #{i}", fixture['name']
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_yml_file_in_subdirectory
|
244
|
+
assert_equal(categories(:sub_special_1).name, "A special category in a subdir file")
|
245
|
+
assert_equal(categories(:sub_special_1).class, SpecialCategory)
|
246
|
+
end
|
247
|
+
|
248
|
+
def test_subsubdir_file_with_arbitrary_name
|
249
|
+
assert_equal(categories(:sub_special_3).name, "A special category in an arbitrarily named subsubdir file")
|
250
|
+
assert_equal(categories(:sub_special_3).class, SpecialCategory)
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_binary_in_fixtures
|
254
|
+
data = File.open(ASSETS_ROOT + "/flowers.jpg", 'rb') { |f| f.read }
|
255
|
+
data.force_encoding('ASCII-8BIT')
|
256
|
+
data.freeze
|
257
|
+
assert_equal data, @flowers.data
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_serialized_fixtures
|
261
|
+
assert_equal ["Green", "Red", "Orange"], traffic_lights(:uk).state
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_fixtures_are_set_up_with_database_env_variable
|
265
|
+
db_url_tmp = ENV['DATABASE_URL']
|
266
|
+
ENV['DATABASE_URL'] = "sqlite3::memory:"
|
267
|
+
ActiveRecord::Base.stub(:configurations, {}) do
|
268
|
+
test_case = Class.new(ActiveRecord::TestCase) do
|
269
|
+
fixtures :accounts
|
270
|
+
|
271
|
+
def test_fixtures
|
272
|
+
assert accounts(:signals37)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
result = test_case.new(:test_fixtures).run
|
277
|
+
|
278
|
+
assert result.passed?, "Expected #{result.name} to pass:\n#{result}"
|
279
|
+
end
|
280
|
+
ensure
|
281
|
+
ENV['DATABASE_URL'] = db_url_tmp
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
class HasManyThroughFixture < ActiveSupport::TestCase
|
286
|
+
def make_model(name)
|
287
|
+
Class.new(ActiveRecord::Base) { define_singleton_method(:name) { name } }
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_has_many_through_with_default_table_name
|
291
|
+
pt = make_model "ParrotTreasure"
|
292
|
+
parrot = make_model "Parrot"
|
293
|
+
treasure = make_model "Treasure"
|
294
|
+
|
295
|
+
pt.table_name = "parrots_treasures"
|
296
|
+
pt.belongs_to :parrot, :anonymous_class => parrot
|
297
|
+
pt.belongs_to :treasure, :anonymous_class => treasure
|
298
|
+
|
299
|
+
parrot.has_many :parrot_treasures, :anonymous_class => pt
|
300
|
+
parrot.has_many :treasures, :through => :parrot_treasures
|
301
|
+
|
302
|
+
parrots = File.join FIXTURES_ROOT, 'parrots'
|
303
|
+
|
304
|
+
fs = ActiveRecord::FixtureSet.new parrot.connection, "parrots", parrot, parrots
|
305
|
+
rows = fs.table_rows
|
306
|
+
assert_equal load_has_and_belongs_to_many['parrots_treasures'], rows['parrots_treasures']
|
307
|
+
end
|
308
|
+
|
309
|
+
def test_has_many_through_with_renamed_table
|
310
|
+
pt = make_model "ParrotTreasure"
|
311
|
+
parrot = make_model "Parrot"
|
312
|
+
treasure = make_model "Treasure"
|
313
|
+
|
314
|
+
pt.belongs_to :parrot, :anonymous_class => parrot
|
315
|
+
pt.belongs_to :treasure, :anonymous_class => treasure
|
316
|
+
|
317
|
+
parrot.has_many :parrot_treasures, :anonymous_class => pt
|
318
|
+
parrot.has_many :treasures, :through => :parrot_treasures
|
319
|
+
|
320
|
+
parrots = File.join FIXTURES_ROOT, 'parrots'
|
321
|
+
|
322
|
+
fs = ActiveRecord::FixtureSet.new parrot.connection, "parrots", parrot, parrots
|
323
|
+
rows = fs.table_rows
|
324
|
+
assert_equal load_has_and_belongs_to_many['parrots_treasures'], rows['parrot_treasures']
|
325
|
+
end
|
326
|
+
|
327
|
+
def load_has_and_belongs_to_many
|
328
|
+
parrot = make_model "Parrot"
|
329
|
+
parrot.has_and_belongs_to_many :treasures
|
330
|
+
|
331
|
+
parrots = File.join FIXTURES_ROOT, 'parrots'
|
332
|
+
|
333
|
+
fs = ActiveRecord::FixtureSet.new parrot.connection, "parrots", parrot, parrots
|
334
|
+
fs.table_rows
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
if Account.connection.respond_to?(:reset_pk_sequence!)
|
339
|
+
class FixturesResetPkSequenceTest < ActiveRecord::TestCase
|
340
|
+
fixtures :accounts
|
341
|
+
fixtures :companies
|
342
|
+
|
343
|
+
def setup
|
344
|
+
@instances = [Account.new(:credit_limit => 50), Company.new(:name => 'RoR Consulting'), Course.new(name: 'Test')]
|
345
|
+
ActiveRecord::FixtureSet.reset_cache # make sure tables get reinitialized
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_resets_to_min_pk_with_specified_pk_and_sequence
|
349
|
+
@instances.each do |instance|
|
350
|
+
model = instance.class
|
351
|
+
model.delete_all
|
352
|
+
model.connection.reset_pk_sequence!(model.table_name, model.primary_key, model.sequence_name)
|
353
|
+
|
354
|
+
instance.save!
|
355
|
+
assert_equal 1, instance.id, "Sequence reset for #{model.table_name} failed."
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
def test_resets_to_min_pk_with_default_pk_and_sequence
|
360
|
+
@instances.each do |instance|
|
361
|
+
model = instance.class
|
362
|
+
model.delete_all
|
363
|
+
model.connection.reset_pk_sequence!(model.table_name)
|
364
|
+
|
365
|
+
instance.save!
|
366
|
+
assert_equal 1, instance.id, "Sequence reset for #{model.table_name} failed."
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
def test_create_fixtures_resets_sequences_when_not_cached
|
371
|
+
@instances.each do |instance|
|
372
|
+
max_id = create_fixtures(instance.class.table_name).first.fixtures.inject(0) do |_max_id, (_, fixture)|
|
373
|
+
fixture_id = fixture['id'].to_i
|
374
|
+
fixture_id > _max_id ? fixture_id : _max_id
|
375
|
+
end
|
376
|
+
|
377
|
+
# Clone the last fixture to check that it gets the next greatest id.
|
378
|
+
instance.save!
|
379
|
+
assert_equal max_id + 1, instance.id, "Sequence reset for #{instance.class.table_name} failed."
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
class FixturesWithoutInstantiationTest < ActiveRecord::TestCase
|
386
|
+
self.use_instantiated_fixtures = false
|
387
|
+
fixtures :topics, :developers, :accounts
|
388
|
+
|
389
|
+
def test_without_complete_instantiation
|
390
|
+
assert !defined?(@first)
|
391
|
+
assert !defined?(@topics)
|
392
|
+
assert !defined?(@developers)
|
393
|
+
assert !defined?(@accounts)
|
394
|
+
end
|
395
|
+
|
396
|
+
def test_fixtures_from_root_yml_without_instantiation
|
397
|
+
assert !defined?(@unknown), "@unknown is not defined"
|
398
|
+
end
|
399
|
+
|
400
|
+
def test_visibility_of_accessor_method
|
401
|
+
assert_equal false, respond_to?(:topics, false), "should be private method"
|
402
|
+
assert_equal true, respond_to?(:topics, true), "confirm to respond surely"
|
403
|
+
end
|
404
|
+
|
405
|
+
def test_accessor_methods
|
406
|
+
assert_equal "The First Topic", topics(:first).title
|
407
|
+
assert_equal "Jamis", developers(:jamis).name
|
408
|
+
assert_equal 50, accounts(:signals37).credit_limit
|
409
|
+
end
|
410
|
+
|
411
|
+
def test_accessor_methods_with_multiple_args
|
412
|
+
assert_equal 2, topics(:first, :second).size
|
413
|
+
assert_raise(StandardError) { topics([:first, :second]) }
|
414
|
+
end
|
415
|
+
|
416
|
+
def test_reloading_fixtures_through_accessor_methods
|
417
|
+
topic = Struct.new(:title)
|
418
|
+
assert_equal "The First Topic", topics(:first).title
|
419
|
+
assert_called(@loaded_fixtures['topics']['first'], :find, returns: topic.new("Fresh Topic!")) do
|
420
|
+
assert_equal "Fresh Topic!", topics(:first, true).title
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
class FixturesWithoutInstanceInstantiationTest < ActiveRecord::TestCase
|
426
|
+
self.use_instantiated_fixtures = true
|
427
|
+
self.use_instantiated_fixtures = :no_instances
|
428
|
+
|
429
|
+
fixtures :topics, :developers, :accounts
|
430
|
+
|
431
|
+
def test_without_instance_instantiation
|
432
|
+
assert !defined?(@first), "@first is not defined"
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
class TransactionalFixturesTest < ActiveRecord::TestCase
|
437
|
+
self.use_instantiated_fixtures = true
|
438
|
+
self.use_transactional_tests = true
|
439
|
+
|
440
|
+
fixtures :topics
|
441
|
+
|
442
|
+
def test_destroy
|
443
|
+
assert_not_nil @first
|
444
|
+
@first.destroy
|
445
|
+
end
|
446
|
+
|
447
|
+
def test_destroy_just_kidding
|
448
|
+
assert_not_nil @first
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
class MultipleFixturesTest < ActiveRecord::TestCase
|
453
|
+
fixtures :topics
|
454
|
+
fixtures :developers, :accounts
|
455
|
+
|
456
|
+
def test_fixture_table_names
|
457
|
+
assert_equal %w(topics developers accounts), fixture_table_names
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
class SetupTest < ActiveRecord::TestCase
|
462
|
+
# fixtures :topics
|
463
|
+
|
464
|
+
def setup
|
465
|
+
@first = true
|
466
|
+
end
|
467
|
+
|
468
|
+
def test_nothing
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
class SetupSubclassTest < SetupTest
|
473
|
+
def setup
|
474
|
+
super
|
475
|
+
@second = true
|
476
|
+
end
|
477
|
+
|
478
|
+
def test_subclassing_should_preserve_setups
|
479
|
+
assert @first
|
480
|
+
assert @second
|
481
|
+
end
|
482
|
+
end
|
483
|
+
|
484
|
+
class OverlappingFixturesTest < ActiveRecord::TestCase
|
485
|
+
fixtures :topics, :developers
|
486
|
+
fixtures :developers, :accounts
|
487
|
+
|
488
|
+
def test_fixture_table_names
|
489
|
+
assert_equal %w(topics developers accounts), fixture_table_names
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
class ForeignKeyFixturesTest < ActiveRecord::TestCase
|
494
|
+
fixtures :fk_test_has_pk, :fk_test_has_fk
|
495
|
+
|
496
|
+
# if foreign keys are implemented and fixtures
|
497
|
+
# are not deleted in reverse order then this test
|
498
|
+
# case will raise StatementInvalid
|
499
|
+
|
500
|
+
def test_number1
|
501
|
+
assert true
|
502
|
+
end
|
503
|
+
|
504
|
+
def test_number2
|
505
|
+
assert true
|
506
|
+
end
|
507
|
+
end
|
508
|
+
|
509
|
+
class OverRideFixtureMethodTest < ActiveRecord::TestCase
|
510
|
+
fixtures :topics
|
511
|
+
|
512
|
+
def topics(name)
|
513
|
+
topic = super
|
514
|
+
topic.title = 'omg'
|
515
|
+
topic
|
516
|
+
end
|
517
|
+
|
518
|
+
def test_fixture_methods_can_be_overridden
|
519
|
+
x = topics :first
|
520
|
+
assert_equal 'omg', x.title
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
class FixtureWithSetModelClassTest < ActiveRecord::TestCase
|
525
|
+
fixtures :other_posts, :other_comments
|
526
|
+
|
527
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
528
|
+
# and thus takes into account the +set_model_class+.
|
529
|
+
self.use_transactional_tests = false
|
530
|
+
|
531
|
+
def test_uses_fixture_class_defined_in_yaml
|
532
|
+
assert_kind_of Post, other_posts(:second_welcome)
|
533
|
+
end
|
534
|
+
|
535
|
+
def test_loads_the_associations_to_fixtures_with_set_model_class
|
536
|
+
post = other_posts(:second_welcome)
|
537
|
+
comment = other_comments(:second_greetings)
|
538
|
+
assert_equal [comment], post.comments
|
539
|
+
assert_equal post, comment.post
|
540
|
+
end
|
541
|
+
end
|
542
|
+
|
543
|
+
class SetFixtureClassPrevailsTest < ActiveRecord::TestCase
|
544
|
+
set_fixture_class bad_posts: Post
|
545
|
+
fixtures :bad_posts
|
546
|
+
|
547
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
548
|
+
# and thus takes into account the +set_model_class+.
|
549
|
+
self.use_transactional_tests = false
|
550
|
+
|
551
|
+
def test_uses_set_fixture_class
|
552
|
+
assert_kind_of Post, bad_posts(:bad_welcome)
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
class CheckSetTableNameFixturesTest < ActiveRecord::TestCase
|
557
|
+
set_fixture_class :funny_jokes => Joke
|
558
|
+
fixtures :funny_jokes
|
559
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
560
|
+
# and thus takes into account our set_fixture_class
|
561
|
+
self.use_transactional_tests = false
|
562
|
+
|
563
|
+
def test_table_method
|
564
|
+
assert_kind_of Joke, funny_jokes(:a_joke)
|
565
|
+
end
|
566
|
+
end
|
567
|
+
|
568
|
+
class FixtureNameIsNotTableNameFixturesTest < ActiveRecord::TestCase
|
569
|
+
set_fixture_class :items => Book
|
570
|
+
fixtures :items
|
571
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
572
|
+
# and thus takes into account our set_fixture_class
|
573
|
+
self.use_transactional_tests = false
|
574
|
+
|
575
|
+
def test_named_accessor
|
576
|
+
assert_kind_of Book, items(:dvd)
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
class FixtureNameIsNotTableNameMultipleFixturesTest < ActiveRecord::TestCase
|
581
|
+
set_fixture_class :items => Book, :funny_jokes => Joke
|
582
|
+
fixtures :items, :funny_jokes
|
583
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
584
|
+
# and thus takes into account our set_fixture_class
|
585
|
+
self.use_transactional_tests = false
|
586
|
+
|
587
|
+
def test_named_accessor_of_differently_named_fixture
|
588
|
+
assert_kind_of Book, items(:dvd)
|
589
|
+
end
|
590
|
+
|
591
|
+
def test_named_accessor_of_same_named_fixture
|
592
|
+
assert_kind_of Joke, funny_jokes(:a_joke)
|
593
|
+
end
|
594
|
+
end
|
595
|
+
|
596
|
+
class CustomConnectionFixturesTest < ActiveRecord::TestCase
|
597
|
+
set_fixture_class :courses => Course
|
598
|
+
fixtures :courses
|
599
|
+
self.use_transactional_tests = false
|
600
|
+
|
601
|
+
def test_leaky_destroy
|
602
|
+
assert_nothing_raised { courses(:ruby) }
|
603
|
+
courses(:ruby).destroy
|
604
|
+
end
|
605
|
+
|
606
|
+
def test_it_twice_in_whatever_order_to_check_for_fixture_leakage
|
607
|
+
test_leaky_destroy
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
611
|
+
class TransactionalFixturesOnCustomConnectionTest < ActiveRecord::TestCase
|
612
|
+
set_fixture_class :courses => Course
|
613
|
+
fixtures :courses
|
614
|
+
self.use_transactional_tests = true
|
615
|
+
|
616
|
+
def test_leaky_destroy
|
617
|
+
assert_nothing_raised { courses(:ruby) }
|
618
|
+
courses(:ruby).destroy
|
619
|
+
end
|
620
|
+
|
621
|
+
def test_it_twice_in_whatever_order_to_check_for_fixture_leakage
|
622
|
+
test_leaky_destroy
|
623
|
+
end
|
624
|
+
end
|
625
|
+
|
626
|
+
class InvalidTableNameFixturesTest < ActiveRecord::TestCase
|
627
|
+
fixtures :funny_jokes
|
628
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
629
|
+
# and thus takes into account our lack of set_fixture_class
|
630
|
+
self.use_transactional_tests = false
|
631
|
+
|
632
|
+
def test_raises_error
|
633
|
+
assert_raise ActiveRecord::FixtureClassNotFound do
|
634
|
+
funny_jokes(:a_joke)
|
635
|
+
end
|
636
|
+
end
|
637
|
+
end
|
638
|
+
|
639
|
+
class CheckEscapedYamlFixturesTest < ActiveRecord::TestCase
|
640
|
+
set_fixture_class :funny_jokes => Joke
|
641
|
+
fixtures :funny_jokes
|
642
|
+
# Set to false to blow away fixtures cache and ensure our fixtures are loaded
|
643
|
+
# and thus takes into account our set_fixture_class
|
644
|
+
self.use_transactional_tests = false
|
645
|
+
|
646
|
+
def test_proper_escaped_fixture
|
647
|
+
assert_equal "The \\n Aristocrats\nAte the candy\n", funny_jokes(:another_joke).name
|
648
|
+
end
|
649
|
+
end
|
650
|
+
|
651
|
+
class DevelopersProject; end
|
652
|
+
class ManyToManyFixturesWithClassDefined < ActiveRecord::TestCase
|
653
|
+
fixtures :developers_projects
|
654
|
+
|
655
|
+
def test_this_should_run_cleanly
|
656
|
+
assert true
|
657
|
+
end
|
658
|
+
end
|
659
|
+
|
660
|
+
class FixturesBrokenRollbackTest < ActiveRecord::TestCase
|
661
|
+
def blank_setup
|
662
|
+
@fixture_connections = [ActiveRecord::Base.connection]
|
663
|
+
end
|
664
|
+
alias_method :ar_setup_fixtures, :setup_fixtures
|
665
|
+
alias_method :setup_fixtures, :blank_setup
|
666
|
+
alias_method :setup, :blank_setup
|
667
|
+
|
668
|
+
def blank_teardown; end
|
669
|
+
alias_method :ar_teardown_fixtures, :teardown_fixtures
|
670
|
+
alias_method :teardown_fixtures, :blank_teardown
|
671
|
+
alias_method :teardown, :blank_teardown
|
672
|
+
|
673
|
+
def test_no_rollback_in_teardown_unless_transaction_active
|
674
|
+
assert_equal 0, ActiveRecord::Base.connection.open_transactions
|
675
|
+
assert_raise(RuntimeError) { ar_setup_fixtures }
|
676
|
+
assert_equal 0, ActiveRecord::Base.connection.open_transactions
|
677
|
+
assert_nothing_raised { ar_teardown_fixtures }
|
678
|
+
assert_equal 0, ActiveRecord::Base.connection.open_transactions
|
679
|
+
end
|
680
|
+
|
681
|
+
private
|
682
|
+
def load_fixtures(config)
|
683
|
+
raise 'argh'
|
684
|
+
end
|
685
|
+
end
|
686
|
+
|
687
|
+
class LoadAllFixturesTest < ActiveRecord::TestCase
|
688
|
+
def test_all_there
|
689
|
+
self.class.fixture_path = FIXTURES_ROOT + "/all"
|
690
|
+
self.class.fixtures :all
|
691
|
+
|
692
|
+
if File.symlink? FIXTURES_ROOT + "/all/admin"
|
693
|
+
assert_equal %w(admin/accounts admin/users developers people tasks), fixture_table_names.sort
|
694
|
+
end
|
695
|
+
ensure
|
696
|
+
ActiveRecord::FixtureSet.reset_cache
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
700
|
+
class LoadAllFixturesWithPathnameTest < ActiveRecord::TestCase
|
701
|
+
def test_all_there
|
702
|
+
self.class.fixture_path = Pathname.new(FIXTURES_ROOT).join('all')
|
703
|
+
self.class.fixtures :all
|
704
|
+
|
705
|
+
if File.symlink? FIXTURES_ROOT + "/all/admin"
|
706
|
+
assert_equal %w(admin/accounts admin/users developers people tasks), fixture_table_names.sort
|
707
|
+
end
|
708
|
+
ensure
|
709
|
+
ActiveRecord::FixtureSet.reset_cache
|
710
|
+
end
|
711
|
+
end
|
712
|
+
|
713
|
+
class FasterFixturesTest < ActiveRecord::TestCase
|
714
|
+
self.use_transactional_tests = false
|
715
|
+
fixtures :categories, :authors
|
716
|
+
|
717
|
+
def load_extra_fixture(name)
|
718
|
+
fixture = create_fixtures(name).first
|
719
|
+
assert fixture.is_a?(ActiveRecord::FixtureSet)
|
720
|
+
@loaded_fixtures[fixture.table_name] = fixture
|
721
|
+
end
|
722
|
+
|
723
|
+
def test_cache
|
724
|
+
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, 'categories')
|
725
|
+
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, 'authors')
|
726
|
+
|
727
|
+
assert_no_queries do
|
728
|
+
create_fixtures('categories')
|
729
|
+
create_fixtures('authors')
|
730
|
+
end
|
731
|
+
|
732
|
+
load_extra_fixture('posts')
|
733
|
+
assert ActiveRecord::FixtureSet.fixture_is_cached?(ActiveRecord::Base.connection, 'posts')
|
734
|
+
self.class.setup_fixture_accessors :posts
|
735
|
+
assert_equal 'Welcome to the weblog', posts(:welcome).title
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|
739
|
+
class FoxyFixturesTest < ActiveRecord::TestCase
|
740
|
+
fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers,
|
741
|
+
:developers, :"admin/accounts", :"admin/users", :live_parrots, :dead_parrots, :books
|
742
|
+
|
743
|
+
if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
|
744
|
+
require 'models/uuid_parent'
|
745
|
+
require 'models/uuid_child'
|
746
|
+
fixtures :uuid_parents, :uuid_children
|
747
|
+
end
|
748
|
+
|
749
|
+
def test_identifies_strings
|
750
|
+
assert_equal(ActiveRecord::FixtureSet.identify("foo"), ActiveRecord::FixtureSet.identify("foo"))
|
751
|
+
assert_not_equal(ActiveRecord::FixtureSet.identify("foo"), ActiveRecord::FixtureSet.identify("FOO"))
|
752
|
+
end
|
753
|
+
|
754
|
+
def test_identifies_symbols
|
755
|
+
assert_equal(ActiveRecord::FixtureSet.identify(:foo), ActiveRecord::FixtureSet.identify(:foo))
|
756
|
+
end
|
757
|
+
|
758
|
+
def test_identifies_consistently
|
759
|
+
assert_equal 207281424, ActiveRecord::FixtureSet.identify(:ruby)
|
760
|
+
assert_equal 1066363776, ActiveRecord::FixtureSet.identify(:sapphire_2)
|
761
|
+
|
762
|
+
assert_equal 'f92b6bda-0d0d-5fe1-9124-502b18badded', ActiveRecord::FixtureSet.identify(:daddy, :uuid)
|
763
|
+
assert_equal 'b4b10018-ad47-595d-b42f-d8bdaa6d01bf', ActiveRecord::FixtureSet.identify(:sonny, :uuid)
|
764
|
+
end
|
765
|
+
|
766
|
+
TIMESTAMP_COLUMNS = %w(created_at created_on updated_at updated_on)
|
767
|
+
|
768
|
+
def test_populates_timestamp_columns
|
769
|
+
TIMESTAMP_COLUMNS.each do |property|
|
770
|
+
assert_not_nil(parrots(:george).send(property), "should set #{property}")
|
771
|
+
end
|
772
|
+
end
|
773
|
+
|
774
|
+
def test_does_not_populate_timestamp_columns_if_model_has_set_record_timestamps_to_false
|
775
|
+
TIMESTAMP_COLUMNS.each do |property|
|
776
|
+
assert_nil(ships(:black_pearl).send(property), "should not set #{property}")
|
777
|
+
end
|
778
|
+
end
|
779
|
+
|
780
|
+
def test_populates_all_columns_with_the_same_time
|
781
|
+
last = nil
|
782
|
+
|
783
|
+
TIMESTAMP_COLUMNS.each do |property|
|
784
|
+
current = parrots(:george).send(property)
|
785
|
+
last ||= current
|
786
|
+
|
787
|
+
assert_equal(last, current)
|
788
|
+
last = current
|
789
|
+
end
|
790
|
+
end
|
791
|
+
|
792
|
+
def test_only_populates_columns_that_exist
|
793
|
+
assert_not_nil(pirates(:blackbeard).created_on)
|
794
|
+
assert_not_nil(pirates(:blackbeard).updated_on)
|
795
|
+
end
|
796
|
+
|
797
|
+
def test_preserves_existing_fixture_data
|
798
|
+
assert_equal(2.weeks.ago.to_date, pirates(:redbeard).created_on.to_date)
|
799
|
+
assert_equal(2.weeks.ago.to_date, pirates(:redbeard).updated_on.to_date)
|
800
|
+
end
|
801
|
+
|
802
|
+
def test_generates_unique_ids
|
803
|
+
assert_not_nil(parrots(:george).id)
|
804
|
+
assert_not_equal(parrots(:george).id, parrots(:louis).id)
|
805
|
+
end
|
806
|
+
|
807
|
+
def test_automatically_sets_primary_key
|
808
|
+
assert_not_nil(ships(:black_pearl))
|
809
|
+
end
|
810
|
+
|
811
|
+
def test_preserves_existing_primary_key
|
812
|
+
assert_equal(2, ships(:interceptor).id)
|
813
|
+
end
|
814
|
+
|
815
|
+
def test_resolves_belongs_to_symbols
|
816
|
+
assert_equal(parrots(:george), pirates(:blackbeard).parrot)
|
817
|
+
end
|
818
|
+
|
819
|
+
def test_ignores_belongs_to_symbols_if_association_and_foreign_key_are_named_the_same
|
820
|
+
assert_equal(developers(:david), computers(:workstation).developer)
|
821
|
+
end
|
822
|
+
|
823
|
+
def test_supports_join_tables
|
824
|
+
assert(pirates(:blackbeard).parrots.include?(parrots(:george)))
|
825
|
+
assert(pirates(:blackbeard).parrots.include?(parrots(:louis)))
|
826
|
+
assert(parrots(:george).pirates.include?(pirates(:blackbeard)))
|
827
|
+
end
|
828
|
+
|
829
|
+
def test_supports_inline_habtm
|
830
|
+
assert(parrots(:george).treasures.include?(treasures(:diamond)))
|
831
|
+
assert(parrots(:george).treasures.include?(treasures(:sapphire)))
|
832
|
+
assert(!parrots(:george).treasures.include?(treasures(:ruby)))
|
833
|
+
end
|
834
|
+
|
835
|
+
def test_supports_inline_habtm_with_specified_id
|
836
|
+
assert(parrots(:polly).treasures.include?(treasures(:ruby)))
|
837
|
+
assert(parrots(:polly).treasures.include?(treasures(:sapphire)))
|
838
|
+
assert(!parrots(:polly).treasures.include?(treasures(:diamond)))
|
839
|
+
end
|
840
|
+
|
841
|
+
def test_supports_yaml_arrays
|
842
|
+
assert(parrots(:louis).treasures.include?(treasures(:diamond)))
|
843
|
+
assert(parrots(:louis).treasures.include?(treasures(:sapphire)))
|
844
|
+
end
|
845
|
+
|
846
|
+
def test_strips_DEFAULTS_key
|
847
|
+
assert_raise(StandardError) { parrots(:DEFAULTS) }
|
848
|
+
|
849
|
+
# this lets us do YAML defaults and not have an extra fixture entry
|
850
|
+
%w(sapphire ruby).each { |t| assert(parrots(:davey).treasures.include?(treasures(t))) }
|
851
|
+
end
|
852
|
+
|
853
|
+
def test_supports_label_interpolation
|
854
|
+
assert_equal("frederick", parrots(:frederick).name)
|
855
|
+
end
|
856
|
+
|
857
|
+
def test_supports_label_string_interpolation
|
858
|
+
assert_equal("X marks the spot!", pirates(:mark).catchphrase)
|
859
|
+
end
|
860
|
+
|
861
|
+
def test_supports_label_interpolation_for_integer_label
|
862
|
+
assert_equal("#1 pirate!", pirates(1).catchphrase)
|
863
|
+
end
|
864
|
+
|
865
|
+
def test_supports_polymorphic_belongs_to
|
866
|
+
assert_equal(pirates(:redbeard), treasures(:sapphire).looter)
|
867
|
+
assert_equal(parrots(:louis), treasures(:ruby).looter)
|
868
|
+
end
|
869
|
+
|
870
|
+
def test_only_generates_a_pk_if_necessary
|
871
|
+
m = Matey.first
|
872
|
+
m.pirate = pirates(:blackbeard)
|
873
|
+
m.target = pirates(:redbeard)
|
874
|
+
end
|
875
|
+
|
876
|
+
def test_supports_sti
|
877
|
+
assert_kind_of DeadParrot, parrots(:polly)
|
878
|
+
assert_equal pirates(:blackbeard), parrots(:polly).killer
|
879
|
+
end
|
880
|
+
|
881
|
+
def test_supports_sti_with_respective_files
|
882
|
+
assert_kind_of LiveParrot, live_parrots(:dusty)
|
883
|
+
assert_kind_of DeadParrot, dead_parrots(:deadbird)
|
884
|
+
assert_equal pirates(:blackbeard), dead_parrots(:deadbird).killer
|
885
|
+
end
|
886
|
+
|
887
|
+
def test_namespaced_models
|
888
|
+
assert admin_accounts(:signals37).users.include?(admin_users(:david))
|
889
|
+
assert_equal 2, admin_accounts(:signals37).users.size
|
890
|
+
end
|
891
|
+
|
892
|
+
def test_resolves_enums
|
893
|
+
assert books(:awdr).published?
|
894
|
+
assert books(:awdr).read?
|
895
|
+
assert books(:rfr).proposed?
|
896
|
+
assert books(:ddd).published?
|
897
|
+
end
|
898
|
+
end
|
899
|
+
|
900
|
+
class ActiveSupportSubclassWithFixturesTest < ActiveRecord::TestCase
|
901
|
+
fixtures :parrots
|
902
|
+
|
903
|
+
# This seemingly useless assertion catches a bug that caused the fixtures
|
904
|
+
# setup code call nil[]
|
905
|
+
def test_foo
|
906
|
+
assert_equal parrots(:louis), Parrot.find_by_name("King Louis")
|
907
|
+
end
|
908
|
+
end
|
909
|
+
|
910
|
+
class CustomNameForFixtureOrModelTest < ActiveRecord::TestCase
|
911
|
+
ActiveRecord::FixtureSet.reset_cache
|
912
|
+
|
913
|
+
set_fixture_class :randomly_named_a9 =>
|
914
|
+
ClassNameThatDoesNotFollowCONVENTIONS,
|
915
|
+
:'admin/randomly_named_a9' =>
|
916
|
+
Admin::ClassNameThatDoesNotFollowCONVENTIONS1,
|
917
|
+
'admin/randomly_named_b0' =>
|
918
|
+
Admin::ClassNameThatDoesNotFollowCONVENTIONS2
|
919
|
+
|
920
|
+
fixtures :randomly_named_a9, 'admin/randomly_named_a9',
|
921
|
+
:'admin/randomly_named_b0'
|
922
|
+
|
923
|
+
def test_named_accessor_for_randomly_named_fixture_and_class
|
924
|
+
assert_kind_of ClassNameThatDoesNotFollowCONVENTIONS,
|
925
|
+
randomly_named_a9(:first_instance)
|
926
|
+
end
|
927
|
+
|
928
|
+
def test_named_accessor_for_randomly_named_namespaced_fixture_and_class
|
929
|
+
assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS1,
|
930
|
+
admin_randomly_named_a9(:first_instance)
|
931
|
+
assert_kind_of Admin::ClassNameThatDoesNotFollowCONVENTIONS2,
|
932
|
+
admin_randomly_named_b0(:second_instance)
|
933
|
+
end
|
934
|
+
|
935
|
+
def test_table_name_is_defined_in_the_model
|
936
|
+
assert_equal 'randomly_named_table2', ActiveRecord::FixtureSet::all_loaded_fixtures["admin/randomly_named_a9"].table_name
|
937
|
+
assert_equal 'randomly_named_table2', Admin::ClassNameThatDoesNotFollowCONVENTIONS1.table_name
|
938
|
+
end
|
939
|
+
end
|
940
|
+
|
941
|
+
class FixturesWithDefaultScopeTest < ActiveRecord::TestCase
|
942
|
+
fixtures :bulbs
|
943
|
+
|
944
|
+
test "inserts fixtures excluded by a default scope" do
|
945
|
+
assert_equal 1, Bulb.count
|
946
|
+
assert_equal 2, Bulb.unscoped.count
|
947
|
+
end
|
948
|
+
|
949
|
+
test "allows access to fixtures excluded by a default scope" do
|
950
|
+
assert_equal "special", bulbs(:special).name
|
951
|
+
end
|
952
|
+
end
|
953
|
+
|
954
|
+
class FixturesWithAbstractBelongsTo < ActiveRecord::TestCase
|
955
|
+
fixtures :pirates, :doubloons
|
956
|
+
|
957
|
+
test "creates fixtures with belongs_to associations defined in abstract base classes" do
|
958
|
+
assert_not_nil doubloons(:blackbeards_doubloon)
|
959
|
+
assert_equal pirates(:blackbeard), doubloons(:blackbeards_doubloon).pirate
|
960
|
+
end
|
961
|
+
end
|
962
|
+
|
963
|
+
class FixtureClassNamesTest < ActiveRecord::TestCase
|
964
|
+
def setup
|
965
|
+
@saved_cache = self.fixture_class_names.dup
|
966
|
+
end
|
967
|
+
|
968
|
+
def teardown
|
969
|
+
self.fixture_class_names.replace(@saved_cache)
|
970
|
+
end
|
971
|
+
|
972
|
+
test "fixture_class_names returns nil for unregistered identifier" do
|
973
|
+
assert_nil self.fixture_class_names['unregistered_identifier']
|
974
|
+
end
|
975
|
+
end
|
976
|
+
|
977
|
+
class SameNameDifferentDatabaseFixturesTest < ActiveRecord::TestCase
|
978
|
+
fixtures :dogs, :other_dogs
|
979
|
+
|
980
|
+
test "fixtures are properly loaded" do
|
981
|
+
# Force loading the fixtures again to reproduce issue
|
982
|
+
ActiveRecord::FixtureSet.reset_cache
|
983
|
+
create_fixtures("dogs", "other_dogs")
|
984
|
+
|
985
|
+
assert_kind_of Dog, dogs(:sophie)
|
986
|
+
assert_kind_of OtherDog, other_dogs(:lassie)
|
987
|
+
end
|
988
|
+
end
|