Diff of the two buildlogs: -- --- b1/build.log 2025-11-09 06:11:50.557017955 +0000 +++ b2/build.log 2025-11-09 06:12:31.017063542 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sat Dec 12 00:33:11 -12 2026 -I: pbuilder-time-stamp: 1797078791 +I: Current time: Sun Nov 9 20:11:52 +14 2025 +I: pbuilder-time-stamp: 1762668712 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -25,53 +25,85 @@ dpkg-source: info: applying 0004-Fix-failing-tests-with-rails-5.2.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/4009283/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/D01_modify_environment starting +debug: Running on codethink04-arm64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Nov 9 06:11 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='arm64' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='unstable' - HOME='/root' - HOST_ARCH='arm64' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="3" [2]="3" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.3.3(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=arm64 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 nocheck' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='16f762479d984a09a8b8fbc8ef0850fb' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='4009283' - PS1='# ' - PS2='> ' + INVOCATION_ID=b21950c6ce7e4c5fbad1063e61168157 + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=3132604 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.i1qXv4sM/pbuilderrc_I2Iz --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.i1qXv4sM/b1 --logfile b1/build.log ruby-factory-bot_6.5.6-1.dsc' - SUDO_GID='109' - SUDO_HOME='/var/lib/jenkins' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.i1qXv4sM/pbuilderrc_skX8 --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.i1qXv4sM/b2 --logfile b2/build.log ruby-factory-bot_6.5.6-1.dsc' + SUDO_GID=109 + SUDO_HOME=/var/lib/jenkins + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink03-arm64 6.12.48+deb13-cloud-arm64 #1 SMP Debian 6.12.48-1 (2025-09-20) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.12.48+deb13-cloud-arm64 #1 SMP Debian 6.12.48-1 (2025-09-20) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Aug 10 2025 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/4009283/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -261,7 +293,7 @@ Get: 136 http://deb.debian.org/debian unstable/main arm64 ruby-rspec-its all 1.3.0-1 [6864 B] Get: 137 http://deb.debian.org/debian unstable/main arm64 ruby-sqlite3 arm64 1.7.3-2 [49.3 kB] Get: 138 http://deb.debian.org/debian unstable/main arm64 ruby-timecop all 0.9.10-1.1 [12.2 kB] -Fetched 35.8 MB in 1s (62.9 MB/s) +Fetched 35.8 MB in 0s (201 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19968 files and directories currently installed.) @@ -722,8 +754,8 @@ Setting up tzdata (2025b-5) ... Current default time zone: 'Etc/UTC' -Local time is now: Sat Dec 12 12:33:54 UTC 2026. -Universal Time is now: Sat Dec 12 12:33:54 UTC 2026. +Local time is now: Sun Nov 9 06:12:13 UTC 2025. +Universal Time is now: Sun Nov 9 06:12:13 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... @@ -848,7 +880,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-factory-bot-6.5.6/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-factory-bot_6.5.6-1_source.changes +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-factory-bot-6.5.6/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-factory-bot_6.5.6-1_source.changes dpkg-buildpackage: info: source package ruby-factory-bot dpkg-buildpackage: info: source version 6.5.6-1 dpkg-buildpackage: info: source distribution unstable @@ -869,8 +905,7 @@ dh_ruby --configure dh_auto_build -O--buildsystem=ruby dh_ruby --build - dh_auto_test -O--buildsystem=ruby - dh_ruby --test +dh: command-omitted: The call to "dh_auto_test -O--buildsystem=ruby" was omitted due to "DEB_BUILD_OPTIONS=nocheck" create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=ruby dh_prep -O--buildsystem=ruby @@ -881,7 +916,7 @@ │ ruby-factory-bot: Installing files and building extensions for ruby3.3 │ └──────────────────────────────────────────────────────────────────────────────┘ -/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20261212-4028479-cqatll/gemspec +/usr/bin/ruby3.3 -S gem build --config-file /dev/null --verbose /tmp/d20251109-3180238-28hzcs/gemspec WARNING: open-ended dependency on activesupport (>= 6.1.0) is not recommended if activesupport is semantically versioned, use: add_runtime_dependency "activesupport", "~> 6.1", ">= 6.1.0" @@ -912,7 +947,7 @@ Name: factory_bot Version: 6.5.6 File: factory_bot-6.5.6.gem -/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-factory-bot/usr/share/rubygems-integration/all /tmp/d20261212-4028479-cqatll/factory_bot-6.5.6.gem +/usr/bin/ruby3.3 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-factory-bot/usr/share/rubygems-integration/all /tmp/d20251109-3180238-28hzcs/factory_bot-6.5.6.gem /build/reproducible-path/ruby-factory-bot-6.5.6/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.5.6/lib/factory_bot.rb /build/reproducible-path/ruby-factory-bot-6.5.6/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.5.6/lib/factory_bot/aliases.rb /build/reproducible-path/ruby-factory-bot-6.5.6/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.5.6/lib/factory_bot/attribute.rb @@ -981,1446 +1016,7 @@ find lib/ -type d -empty -delete cd - cd - -/usr/bin/ruby3.3 /usr/bin/gem2deb-test-runner - -┌──────────────────────────────────────────────────────────────────────────────┐ -│ Checking Rubygems dependency resolution on ruby3.3 │ -└──────────────────────────────────────────────────────────────────────────────┘ - -RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-factory-bot-6.5.6/debian/ruby-factory-bot/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-factory-bot-6.5.6/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -e gem\ \"factory_bot\" -mv Gemfile.lock ./.gem2deb.Gemfile.lock -mv ./.gem2deb.Gemfile.lock Gemfile.lock - -┌──────────────────────────────────────────────────────────────────────────────┐ -│ Run tests for ruby3.3 from debian/ruby-tests.rake │ -└──────────────────────────────────────────────────────────────────────────────┘ - -RUBYLIB=. GEM_PATH=/build/reproducible-path/ruby-factory-bot-6.5.6/debian/ruby-factory-bot/usr/share/rubygems-integration/all:/build/reproducible-path/ruby-factory-bot-6.5.6/debian/.debhelper/generated/_source/home/.local/share/gem/ruby/3.3.0:/var/lib/gems/3.3.0:/usr/local/lib/ruby/gems/3.3.0:/usr/lib/ruby/gems/3.3.0:/usr/lib/aarch64-linux-gnu/ruby/gems/3.3.0:/usr/share/rubygems-integration/3.3.0:/usr/share/rubygems-integration/all:/usr/lib/aarch64-linux-gnu/rubygems-integration/3.3.0 ruby3.3 -S rake --rakelibdir /gem2deb-nonexistent -f debian/ruby-tests.rake -mv Gemfile.lock ./.gem2deb.Gemfile.lock -/usr/bin/ruby3.3 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/\{\*_spec.rb,factory_bot/\*\*/\*_spec.rb\} --format documentation - -Randomized with seed 23401 - -FactoryBot::Strategy::Create - runs a custom create block - it should behave like strategy with association support - finds the factory with the correct factory name - runs the factory with the correct overrides - it should behave like strategy with callbacks - returns the object from the evaluation - runs the callbacks [:after_build, :before_create, :after_create] with the evaluation's object - -FactoryBot::DefinitionProxy#to_create - accepts a block to run in place of #save! - -FactoryBot - finds a registered strategy - .use_parent_strategy - is true by default - -FactoryBot::DefinitionProxy#sequence - creates a new sequence starting at 1 - creates a new sequence with a block - creates a new sequence with an overridden starting value - -FactoryBot::NullFactory - delegates constructor to its definition - delegates defined traits to its definition - delegates callbacks to its definition - has a nil value for its compile attribute - delegates attributes to its definition - has FactoryBot::Evaluator as its evaluator class - has an instance of FactoryBot::AttributeList for its attributes attribute - has a nil value for its class_name attribute - -FactoryBot::DeclarationList#declare_attribute - appends declarations with the same name when NOT overridable - deletes declarations with the same name when overridable - adds the declaration to the list when not overridable - adds the declaration to the list when overridable - -FactoryBot::Attribute::Dynamic with a string name - name - is expected to eq :name - -FactoryBot::Factory - includes associations from the parent factory - has a build class - has a factory name - guesses the build class from the factory name - returns associations - creates a new factory while overriding the parent class - creates a new factory using the class of the parent - when overriding generated attributes with a hash - returns the overridden value in the generated attributes - overrides a symbol parameter with a string parameter - overriding an attribute with an alias - discards the predefined value for the attribute - uses the passed in value for the alias - -FactoryBot::Attribute::Association with a string name - name - is expected to eq :name - -FactoryBot::Declaration::Implicit - #== - when comparing against another type of object - the objects are NOT equal - when the attributes are equal - the objects are equal - when one is ignored and the other isn't - the objects are NOT equal - when the names are different - the objects are NOT equal - when the factories are different - the objects are NOT equal - with a known sequence - creates a sequence attribute - does not create an association attribute - with a known factory - creates an association attribute - has the correct factory name - -FactoryBot::Strategy::Stub - it should behave like strategy with callbacks - runs the callbacks [:after_stub] with the evaluation's object - returns the object from the evaluation - it should behave like strategy with association support - runs the factory with the correct overrides - finds the factory with the correct factory name - asking for a result - is expected to be persisted - is expected not to be destroyed - assigns created_at - is expected not to be new record - overriding persistence method: #update - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #connection - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #delete - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #decrement! - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #update_attribute - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #touch - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #destroy - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #update_attributes! - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #increment! - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #save - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #update_columns - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #save! - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #destroy! - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #update! - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #toggle! - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #update_attributes - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #reload - raises an informative error if the method is called - overrides the method with any arity - overriding persistence method: #update_column - raises an informative error if the method is called - overrides the method with any arity - it should behave like strategy with strategy: :build - finds the factory with the correct factory name - runs the factory with the correct overrides - -FactoryBot::Strategy::Build - it should behave like strategy with strategy: :build - runs the factory with the correct overrides - finds the factory with the correct factory name - it should behave like strategy with association support - runs the factory with the correct overrides - finds the factory with the correct factory name - it should behave like strategy with callbacks - returns the object from the evaluation - runs the callbacks [:after_build] with the evaluation's object - -FactoryBot::Factory human names - parses names without underscores - parses human names with underscores - parses names with big letters - parses human names with big letters - parses human names with aliases - parses names with aliases - parses human names without underscores - parses names with underscores - -FactoryBot::DefinitionProxy#association - declares an association - declares an association with options - when passing a block raises an error - -FactoryBot::Declaration::Association - #== - when the attributes are equal - the objects are equal - when the names are different - the objects are NOT equal - when the options are different - the objects are NOT equal - when comparing against another type of object - the objects are NOT equal - -FactoryBot::Sequence - a custom sequence and scope increments within the correct scope when incrementing - a custom lazy sequence and scope increments within the correct scope when incrementing - a custom sequence and scope increments within the correct scope - a custom lazy sequence and scope increments within the correct scope - a custom scope increments within the correct scope after rewinding - a custom scope with a lazy sequence increments within the correct scope after rewinding - a custom sequence - behaves like a sequence - has a next value equal to its first value - has a next value equal to the 2nd value after being incremented - has a next value equal to the 1st value after rewinding - a custom sequence without a block - behaves like a sequence - has a next value equal to the 1st value after rewinding - has a next value equal to its first value - has a next value equal to the 2nd value after being incremented - iterating over items in an enumerator - navigates to the next items until no items remain - behaves like a sequence - has a next value equal to the 2nd value after being incremented - has a next value equal to the 1st value after rewinding - has a next value equal to its first value - a sequence with a lazy initial value without a block - behaves like a sequence - has a next value equal to the 1st value after rewinding - has a next value equal to its first value - has a next value equal to the 2nd value after being incremented - a sequence with custom value and aliases - has the expected names as its names - behaves like a sequence - has a next value equal to its first value - has a next value equal to the 2nd value after being incremented - has a next value equal to the 1st value after rewinding - .find_by_uri - accepts a String - returns nil with a non-matching URI - raises an exception with no arguments given - accepts a Symbol - a basic sequence without a block - behaves like a sequence - has a next value equal to its first value - has a next value equal to the 2nd value after being incremented - has a next value equal to the 1st value after rewinding - a sequence with aliases using default value - has the expected names as its names - behaves like a sequence - has a next value equal to the 2nd value after being incremented - has a next value equal to the 1st value after rewinding - has a next value equal to its first value - a sequence with lazy initial value and a block - behaves like a sequence - has a next value equal to its first value - has a next value equal to the 2nd value after being incremented - has a next value equal to the 1st value after rewinding - .find - accepts a list of symbols - raises an exception with no arguments given - accepts a list of strings - accepts a mixture of symbols & strings - returns nil with a non-matching URI - a basic sequence - behaves like a sequence - has a next value equal to the 1st value after rewinding - has a next value equal to the 2nd value after being incremented - has a next value equal to its first value - name - is expected to eq :test - names - is expected to eq [:test] - -FactoryBot::Attribute - converts the name attribute to a symbol - is not an association - -FactoryBot::Factory when defined with a class instead of a name - has a name - has a build_class - -FactoryBot::Callback - runs its block with one parameter - has a name - runs its block with no parameters - converts strings to symbols - runs its block with two parameters - -FactoryBot::Definition - maintains a list of traits - has an overridable declaration list - creates a new attribute list with the name passed when given a name - delegates :declare_attribute to declarations - has a name - doesn't expose a separate create strategy when none is specified - maintains a list of callbacks - maintains a list of enum fields - exposes a non-default create strategy when one is provided by the user - adds only unique traits - -FactoryBot::DefinitionProxy#add_attribute - declares a dynamic attribute on the factory when the proxy respects attributes - declares a dynamic attribute on the factory when the proxy ignores attributes - -FactoryBot::DefinitionProxy#method_missing - raises a NoMethodError when called with a static-attribute-like argument - declares an association when called with a ':factory' key - declares a dynamic attribute when called with a block - declares an implicit declaration when called without args or a block - -FactoryBot::Attribute::Sequence - assigns the next value in the sequence - name - is expected to eq :first_name - -FactoryBot::Declaration::Dynamic - #== - when comparing against another type of object - the objects are NOT equal - when one is ignored and the other isn't - the objects are NOT equal - when the blocks are different - the objects are NOT equal - when the attributes are equal - the objects are equal - when the names are different - the objects are NOT equal - -FactoryBot::DeclarationList#attributes - returns an AttributeList - defines each attribute on the attribute list - -FactoryBot::EvaluatorClassDefiner - sets attributes on the evaluator class - evaluates the block in the context of the evaluator - adds each attribute to the evaluator - only instance_execs the block once even when returning nil - returns an evaluator when accessing the evaluator class - with a custom evaluator as a parent class - bases its attribute lists on itself and its parent evaluator - -FactoryBot::Factory when given a class that overrides #to_s - sets build_class correctly - -FactoryBot aliases - for a foreign key should include both the suffixed and un-suffixed variants - for an attribute which starts with an underscore should not include a non-underscored version - for an attribute should include the original attribute and a version suffixed with '_id' - -FactoryBot::Registry - knows that an object is registered by string - clears registered factories - adds and returns the object registered - finds a registered object - includes a did_you_mean message - raises when an object cannot be found - is an enumerable - knows when an object is not registered - iterates registered objects - knows that an object is registered by symbol - finds a registered object with square brackets - does not include duplicate objects with registered under different names - -FactoryBot::DefinitionProxy#trait - declares a trait - -FactoryBot::Factory for namespaced class - sets build_class correctly with a namespaced class with namespace/class syntax - sets build_class correctly with a namespaced class with Namespace::Class syntax - -FactoryBot::AttributeList#apply_attributes - adds attributes in the order defined - -FactoryBot::Internal - .register_factory - returns the registered factory - registers the provided factory - .strategy_by_name - finds a registered strategy - .register_sequence - registers the provided sequence - returns the registered sequence - .register_trait - returns the registered trait - registers the provided trait - .rewind_sequences - rewinds the sequences and the internal sequences - .sequence_by_name - finds a registered sequence - .register_factory - returns the registered factory - registers the provided factory - .factory_by_name - finds a registered factory - .trait_by_name - finds a previously registered trait - .factory_by_name - finds a registered factory - .register_strategy - register the provided strategy name with the class - -FactoryBot::Factory when defined with a custom class name - has a build_class equal to its custom class name - -FactoryBot::AttributeList#define_attribute - maintains a list of attributes - returns the attribute - raises if an attribute has already been defined - -FactoryBot::AttributeList#associations - returns associations - -FactoryBot::AttributeList generating names - knows all its #names for #non_ignored attributes - knows all its #names for #ignored attributes - knows all its #names - knows all its #names for #associations - -FactoryBot::AttributeList#define_attribute with a named attribute list - raises when the attribute is a self-referencing association - does not raise when the attribute is not a self-referencing association - -FactoryBot::DefinitionProxy#transient - makes all attributes added ignored - -Attribute Assignment - sets the when directly named - sets the default value if not overridden - -FactoryBot::AttributeList filter based on ignored attributes - filters #ignored attributes - filters #non_ignored attributes - -FactoryBot after defining an alias - the list of aliases should include a variant with no suffix at all, and one with an '_id' suffix - -FactoryBot::Decorator::DisallowsDuplicatesRegistry - delegates #register to the registry when not registered - raises when attempting to #register a previously registered strategy - -FactoryBot::Factory running a factory - creates the right strategy using the build class when running - calls the block and returns the result - returns the result from the strategy when running - -FactoryBot::Strategy - returns the class passed when it is instantiated with a class - returns the strategy found when instantiated with a symbol - finds the strategy by name when instantiated with a symbol - -FactoryBot::Factory with a string for a name - sets build_class correctly with a class with an underscore - has a name - -definition loading - with deeply nested factory files under spec - it should behave like finds definitions - is expected to load definitions from spec/factories/subdirectory/person_factory.rb - is expected to load definitions from spec/factories/subdirectory/post_factory.rb - with several factories files under spec/factories - it should behave like finds definitions - is expected to load definitions from spec/factories/person_factory.rb - is expected to load definitions from spec/factories/post_factory.rb - with several factories files under test/factories in non-alphabetical order - loads the files in the right order - with nested and unnested factories files under test - it should behave like finds definitions - is expected to load definitions from test/factories.rb - is expected to load definitions from test/factories/post_factory.rb - is expected to load definitions from test/factories/person_factory.rb - with several factories files under spec/factories in non-alphabetical order - loads the files in the right order - with a factories file under spec - it should behave like finds definitions - is expected to load definitions from spec/factories.rb - with factories.rb - it should behave like finds definitions - is expected to load definitions from factories.rb - with a factories file under test/factories - it should behave like finds definitions - is expected to load definitions from test/factories/post_factory.rb - with a factories file under spec/factories - it should behave like finds definitions - is expected to load definitions from spec/factories/post_factory.rb - with deeply nested factory files under test - it should behave like finds definitions - is expected to load definitions from test/factories/subdirectory/person_factory.rb - is expected to load definitions from test/factories/subdirectory/post_factory.rb - with several factories files under test/factories - it should behave like finds definitions - is expected to load definitions from test/factories/person_factory.rb - is expected to load definitions from test/factories/post_factory.rb - with a factories file under test - it should behave like finds definitions - is expected to load definitions from test/factories.rb - with nested and unnested factories files under spec - it should behave like finds definitions - is expected to load definitions from spec/factories/post_factory.rb - is expected to load definitions from spec/factories/person_factory.rb - is expected to load definitions from spec/factories.rb - -FactoryBot::Attribute::Association - builds the association when calling the proc - is expected to be association - builds the association when calling the proc - name - is expected to eq :author - -FactoryBot::Strategy::AttributesFor - returns the hash from the evaluation - does not run the to_create block - it should behave like strategy without association support - returns nil when accessing an association - -FactoryBot::DefinitionProxy#factory - without options - with a block - with options - -FactoryBot::Decorator::AttributeHash - #attributes - returns a hash of attributes - with an attribute called 'attributes' - does not call itself recursively - -FactoryBot::DefinitionProxy adding callbacks - adding a :before_all callback succeeds - adding both a :before_stub and a :before_create callback succeeds - adding both an :after_stub and an :after_create callback succeeds - adding both an :after_stub and a :before_create callback succeeds - adding an :after_build callback succeeds - adding an :after_stub callback succeeds - adding an :after_all callback succeeds - adding an :after_create callback succeeds - -FactoryBot::Attribute::Dynamic - with a block returning its block-level variable - returns self when executing the proc - with a block returning a sequence - raises a sequence abuse error - with a block returning a static value - returns the value when executing the proc - with a block referencing an attribute on the attribute - evaluates the attribute from the attribute - name - is expected to eq :first_name - -FactoryBot::Factory when defined with a custom class - is an instance of that custom class - -FactoryBot::NullObject - does not respond to other methods - responds to the given methods - -FactoryBot::Factory with a name ending in s - has a build class - has a name - -FactoryBot::UriManager - .build_uri - combines the parts to form a Symbol - works with multiple arrays of parts - returns nil when no parts provided - works with a single part - removes leading and trailing slashes - converts space to underlines - #initialize - when only endpoints are provided - stringifies endpoints with non-symbol characters - creates one URI for each endpoint - each URI is a Symbol - accepts a single endpoint - accepts an array of endpoints - fails with no endpoints given - replaces spaces with underlines - accepts a combination of Symbols & Strings - when paths are also provided - replaces spaces with underlines - accepts a single path - accepts an array of arrays of paths - creates one URI for each path/endpoint combination - accepts a combination of Symbol & String paths - -FactoryBot::DefinitionProxy#initialize_with - defines the constructor on the definition - -Finished in 2.11 seconds (files took 1.21 seconds to load) -332 examples, 0 failures - -Randomized with seed 23401 - -/usr/bin/ruby3.3 -I/usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib:/usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/acceptance/\*\*/\*_spec.rb --format documentation - -Randomized with seed 45079 - -initialize_with for a constructor that requires a block - executes the block correctly - -a stubbed instance overriding strategy - acts as if it is saved in the database - assigns associations and acts as if it is saved - -an instance generated by a factory with a custom class name - is expected to be admin - is expected to be a kind of User(id: integer, admin: boolean) - -calling `build` with a block - passes the built instance - returns the built instance - -associations - when building collection associations - builds the association according to the given strategy - when building interrelated associations - connects records with interdependent relationships - assigns the instance passed as an association attribute - when accidentally using an implicit declaration for the factory - raises an error - when accidentally using an implicit declaration as an override - raises an error - -initialize_with with FG attributes that are transient - name - is expected to eq "Handsome Chap from .construct" - -callbacks using syntax methods without referencing FactoryBot explicitly - works when the callback has one variable - works when the callback has no variables - works when the callback has two variables - -defaulting `id` - allows overriding id - -implicit traits containing callbacks - only runs the callback once - -modifying inherited factories with traits - allows modification of attributes created via traits - returns the correct value for overridden attributes from traits defining multiple attributes - returns the correct value for overridden attributes from traits - -a custom create passing in an evaluator - passes the evaluator to the custom create block - -`attributes_for` for a class whose constructor has required params - [:name] - is expected to eq "John Doe" - -calling `create` with a block - returns the created instance - passes the created instance - -initialize_with has access to all attributes for construction - assigns attributes correctly - -an instance generated by a factory that inherits from another factory - the parent class - is expected not to be admin - login - is expected to eq "john@example.com" - name - is expected to eq "John" - email - is expected to eq "john@example.com" - the child class redefining parent's attributes - is expected to be a kind of User(id: integer, name: string, admin: boolean, email: string, upper_email: string, login: string) - is expected to be admin - email - is expected to eq "admin@example.com" - login - is expected to eq "admin@example.com" - name - is expected to eq "admin" - upper_email - is expected to eq "ADMIN@EXAMPLE.COM" - -defining a child factory before a parent - creates admin factories correctly - -build multiple instances - with default attributes - overrides the default values - with a block - correctly uses the set value - with a block that receives both the object and an index - correctly uses the set value - without default attributes - uses the default factory values - builds (but doesn't save) all the posts - length - is expected to eq 20 - -nested implicit traits - defined outside the factory - it should behave like assigning data from traits - assigns the correct values - defined inside the factory - it should behave like assigning data from traits - assigns the correct values - -declaring attributes on a Factory that are private methods on Object - system - is expected to eq false - sleep - is expected to eq -5 - link - is expected to eq "http://example.com" - -register custom strategies - allows overriding default strategies - allows using the *_list method to build a list using a custom strategy - allows using the *_pair method to build a list using a custom strategy - allows adding additional strategies - -finding factories keyed by class instead of symbol - doesn't find the factory - -enum traits - when automatically_define_enum_traits is true - prefers user defined traits over automatically built traits - builds traits for each enumerated value using a provided list of values as an Array - builds traits automatically for model enum field - builds traits for each enumerated value using a custom enumerable - builds traits for each enumerated value using a provided list of values as a Hash - when automatically_define_enum_traits is false - builds traits for each enumerated value when traits_for_enum are specified - raises an error for undefined traits - -#add_attribute - assigns attributes for reserved words on .attributes_for - assigns attributes for reserved words on .build - -a stubbed instance - acts as if it came from the database - assigns associations and acts as if it is saved - -transient sequences - increments sequences correctly - -initialize_with with non-FG attributes - age - is expected to eq 21 - name - is expected to eq "John Doe" - -attribute aliases - edge cases - allows setting nil values through aliases - when both alias and target attributes exist on model - ignores factory defaults for target when alias is used - attribute conflicts with _id patterns - allows setting both attribute and attribute_id without conflicts - doesn't set factory defaults when alias is used instead of target attribute - when association overrides trait foreign key - uses trait foreign key when no association override is provided - handles multiple traits with foreign keys correctly - prefers association override over trait foreign key - basic alias functionality - ignores factory defaults when alias is used - allows using different parameter names that map to model attributes - with attributes_for strategy - includes alias names in hash and ignores aliased factory defaults - when a factory defines attributes for both sides of an association - when using the build strategy - prefers the :user association when defined after the :user_id attribute - prefers the :user_id attribute when defined after the :user attribute - when using the create strategy - handles an override of the foreign key when :user_id is declared last - handles an override of the associated object when :user_id is declared last - handles an override of the associated object when the :user association is declared last - handles an override of the foreign key when the :user association is declared last - built-in _id aliases - allows passing attributes to associated factories - prevents conflicts between associations and foreign keys - automatically alias between associations and foreign keys - custom alias patterns - supports regex patterns with capture groups - works with custom foreign key names - supports multiple alias patterns working together - -binding a callback to multiple callbacks - binds the callback to creation - binds the callback to stubbing - does not bind the callback to building - -assigning overrides that are also private methods on object - format - is expected to eq "Great" - more_format - is expected to eq "format: Great" - some_funky_method - is expected to eq "foobar!" - y - is expected to eq 12345 - -associations without overriding :strategy - when the :use_parent_strategy config option is set to false - uses the overridden strategy on the association - when the :use_parent_strategy config option is set to true - uses the parent strategy on the association - -sequences are evaluated in the correct context, directly & implicitly - invokes the correct method on the instance - builds a sequence calling sprintf correctly - invokes a method with no arguments on the instance - allows direct reference of a method in a sequence - with inherited factories - redefines a child's sequence - maintains context separation - invokes the child's sequenced trait from within the child's own trait - invokes the parent's sequenced trait from within a child's inherited trait - uses the parent's sequenced attribute - -applying inline traits - applies traits only to the instance generated for that call - -traits used in associations - allows assigning traits for the factory of an association - allows inline traits with the default association - allows inline traits with a specific factory for an association - -setting private attributes - raises a NoMethodError - -defining methods inside FactoryBot - accepts a method named :definition when set through :method_missing - raises with a meaningful message - -an instance generated by a factory - registers the user factory - -Ruby 3.0: attributes_for destructuring syntax - supports being destructured - -callbacks - with strategy callbacks - only runs each callback once per instance - runs both the after(:stub) callback on the factory and the inherited after(:stub) callback - runs child callback after parent callback - runs the after(:build) callback when building - runs both the after(:build) and after(:create) callbacks when creating - runs the after(:stub) callback when stubbing - with before(:all) and after(:all) included - with context provided to after(:all) - succeeds with the instance provided - succeeds with both the instance and context provided - are executed in the correct order - with trait callbacks executed in the order requested - with context provided to before(:all) - receives 'nil' as the instance - receives the context, without an instance - -callbacks using Symbol#to_proc - runs the callback correctly - -initialize_with with an 'attributes' attribute - assigns attributes correctly - -a custom create - uses the custom create block instead of save - -accessing methods from the instance within a dynamic attribute that is also a private method on object - more_format - is expected to eq "format: This is an awesome format" - -using ActiveSupport::Instrumentation to track run_factory interaction - tracks proper time of creating the record - builds the correct payload - -attributes defined using Symbol#to_proc - assigns value with override correctly - assigns overridden value correctly - assigns values correctly - -traits and dynamic attributes that are applied simultaneously - email - is expected to eq "John@example.com" - combined - is expected to eq "John " - name - is expected to eq "John" - -association assignment from nested attributes - assigns the correct amount of comments when overridden - assigns the correct amount of comments - -a stubbed instance with timestamps - assigns the exact same datetime - -initialize_with non-ORM-backed objects - generates random data - allows for overrides - -attribute overrides - with a non-admin posting - secure - is expected to be nil - with no user posting - secure - is expected to be nil - with an admin posting - secure - is expected to eq false - -sequences - on failure - it fails with an unknown sequence or factory name - it fails with a sequence that references a scoped attribute, but no scope given - on success - generates aliases for the sequence that reference the same block and retains value - generates few values of the sequence - generates sequences after lazy loading an initial value from a proc - generates sequential numbers if no block is given - generates few values of the sequence with a given scope - generates aliases for the sequence that reference the same block - generates several values in the correct format - generates sequences after lazy loading an initial value from an object responding to call - -looking up traits that don't exist - when the factory includes an invalid default trait - maintains 'Did you mean?' suggestions at the end of the error message - raises a KeyError including the factory name - when passing an invalid override trait - raises a KeyError - when a trait includes an invalid default trait - raises a KeyError including the factory name - -initialize_with parent and child factories - allows child factories to override initialize_with - uses the parent's constructor when the child factory doesn't assign it - -an instance generated by a factory named a camel case string - registers the UserModel factory - -transient attributes - without transient variables assigned - uses the default value of the attribute - with a transient variable assigned - generates the correct attributes on a rockstar with a name - generates the correct attributes on a rockstar - generates the correct attributes on a groupie - generates the correct attributes on an upcased rockstar - returning attributes for a factory - is expected to have key :email - is expected not to have key :upcased - is expected to have key :name - is expected not to have key :rockstar - is expected not to have key :four - -defaulting `updated_at` - allows assignment of updated_at - is doesn't mark the object as changed - doesn't allow setting updated_at on an object that doesn't define it - defaults updated_at for objects with updated_at - behaves the same as a non-stubbed updated_at - doesn't add updated_at to objects who don't have the method - allows overriding updated_at for objects with updated_at - -nested factories with different parents - honors :parent over the factory block nesting - -global callbacks - triggers after build callbacks for all factories - -defaulting `created_at` - doesn't add created_at to objects who don't have the method - defaults created_at for objects with created_at - allows overriding created_at for objects with created_at - is doesn't mark the object as changed - doesn't allow setting created_at on an object that doesn't define it - behaves the same as a non-stubbed created_at - allows assignment of created_at - -modifying factories - raises an exception if the factory was not defined before - allows for overriding child classes - doesn't overwrite already defined child's attributes - reusing traits - name - is expected to eq "Johnny Rockstar!!!" - login - is expected to eq "JOHNNY ROCKSTAR!!!" - email - is expected to eq "Johnny Rockstar!!!@example.com" - adding callbacks - login - is expected to be nil - name - is expected to eq "great user" - redefining attributes - creating admin - overriding the name - name - is expected to eq "wonderful" - email - is expected to eq "wonderful-modified@example.com" - admin - is expected to equal true - overriding the email - name - is expected to eq "Great User" - email - is expected to eq "perfect@example.com" - admin - is expected to equal true - without overrides - admin - is expected to equal true - name - is expected to eq "Great User" - email - is expected to eq "Great User-modified@example.com" - creating user - without overrides - name - is expected to eq "Great User" - email - is expected to eq "Great User-modified@example.com" - overriding the name - name - is expected to eq "wonderful" - email - is expected to eq "wonderful-modified@example.com" - overriding the email - email - is expected to eq "perfect@example.com" - name - is expected to eq "Great User" - simple modification - does allow the factory to be subsequently modified - doesn't allow the factory to be subsequently defined - login - is expected to eq "GREAT USER" - name - is expected to eq "Great User" - -syntax methods within dynamic attributes - can access syntax methods from dynamic attributes - can access syntax methods from dynamic attributes - can access methods already existing on the class - allows syntax methods to be used when the block has an arity of 1 - -custom callbacks - runs a custom callback without prepending before or after when the proper strategy executes - runs a custom before callback when the proper strategy executes - runs a custom after callback when the proper strategy executes - -calling methods on the model instance - with the attribute being overridden - uses the overridden value - uses the overridden value during attributes_for - with the referenced attribute being overridden - uses the overridden value - uses the overridden value during attributes_for - without the attribute being overridden - returns the correct value from the instance - returns nil during attributes_for - doesn't instantiate a record with attributes_for - -assigning values from a transient attribute - does not ignore an _id attribute that is an alias for a transient attribute - -a generated stub instance - assigns associations that aren't new records - allows decrement - has an id - assigns an overridden attribute - allows toggle - disables decrement! - disables connection - isn't a new record - disables reload - assigns associations - disables update_attribute - generates unique ids - assigns a default attribute - disables destroy - disables save - disables increment! - disables toggle! - allows increment - isn't changed - -a built instance - is expected to be new record - when the :use_parent_strategy config option is set to false - assigns and saves associations - when the :use_parent_strategy config option is set to true - assigns but does not save associations - -a created instance - is expected not to be new record - assigns and saves associations - -a generated attributes hash where order matters - factory without a parent - assigns attributes in the order they're defined without a parent class - factory with a parent - assigns attributes in the order they're defined - -initialize_with implicit constructor - instantiates the correct object - -FactoryBot.set_sequence - on success - name format support - accepts String or Symbol factory names - accepts String or Symbol sequence names - sequence targeting by URI - accepts string URIs - accepts symbolic URIs - setting sequence to correct value - works with String sequences - works with Enumerable sequences - does not collide with other factory or global sequences - works with Date sequences - works with negative Integer sequences - works with Integer sequences - works with lazy Integer sequences - alias support - works with aliases for both sequence and factory - error handling - invalid values - raises an error for unmatched String values - times out when value cannot be found within timeout period - leaves sequence unchanged when value is not found - raises an error when value is below minimum for Integer sequences - raises an error for unmatched Enumerable values - unknown sequence names - raises an error for unknown global sequences - raises an error when factory sequence doesn't exist but global does - raises an error for inherited sequences - raises an error for unknown factory sequences - -an instance generated by a factory with multiple traits - the child class with one trait - is expected to be admin - name - is expected to eq "John" - gender - is expected to be nil - child class with scoped trait and inherited trait - is expected to be admin - gender - is expected to eq "Female" - name - is expected to eq "Judy" - the child with multiple traits and overridden attributes - is expected to be admin - name - is expected to eq "Jill" - gender - is expected to be nil - child factory using grandparents' trait - great - is expected to eq "GREAT!!!" - the child with multiple traits - is expected to be admin - name - is expected to eq "Jane" - gender - is expected to eq "Female" - factory using global trait - name - is expected to eq "Bill" - email - is expected to eq "Bill@example.com" - the other child class with one trait - is expected not to be admin - name - is expected to eq "Jane" - gender - is expected to eq "Female" - the child with multiple traits who override the same attribute - when the female assigns name after male - is expected to be admin - gender - is expected to eq "Female" - name - is expected to eq "Jane" - when the male assigns name after female - is expected to be admin - name - is expected to eq "Joe" - gender - is expected to eq "Male" - the parent class - is expected not to be admin - gender - is expected to be nil - name - is expected to eq "John" - child factory created where trait attributes are inherited - gender - is expected to eq "Male" - date_of_birth - is expected to eq Sat, 01 Jan 2000 - factory created with alternate syntax for specifying trait - gender - is expected to eq "Male" - where trait name and attribute are the same and attribute is overridden - great - is expected to eq "SORT OF!!!" - where trait name and attribute are the same - great - is expected to eq "GREAT!!!" - factory with implicit traits called by child - calls the correct trait when child built first - calls the correct trait when parent built first - factory with trait defined multiple times - great - is expected to eq "GREAT!!!" - child factory redefining trait - great - is expected to eq "EVEN GREATER!!!" - -FactoryBot.lint - allows for selective linting - executes linting in an ActiveRecord::Base transaction - does not raise when all factories are valid - raises when a factory is invalid - factory strategy for linting - uses the requested strategy during trait validation - uses the requested strategy - trait validation - disabled - does not raises if a trait produces an invalid object - enabled - raises if a trait produces an invalid object - does not raise if a trait produces a valid object - verbose linting - prints the backtrace for each factory error - -a created instance, specifying strategy: :build - saves associations (strategy: :build only affects build, not create) - -trait indifferent access - when trait is defined as struct - can be invoked with a struct - can be invoked with a string - when trait is defined as a string - can be invoked with a string - can be invoked with a symbol - when trait is defined as integer - can be invoked with a string - can be invoked with as integer - when trait is defined as a symbol - can be invoked with a string - can be invoked with a symbol - -making sure the factory is properly compiled the first time we want to instantiate it - can honor traits on the very first call - -traits added via strategy - adding traits in attributes_for - [:admin] - is expected to equal true - [:name] - is expected to eq "John" - adding traits in build_list - builds all the records - length - is expected to eq 2 - adding traits in build_stubbed - name - is expected to eq "Jack" - admin - is expected to equal true - adding traits in create - doesn't modify the user factory - admin - is expected to equal true - name - is expected to eq "JOE" - adding traits in create_list - creates all the records - length - is expected to eq 2 - adding traits in build - name - is expected to eq "Joe" - admin - is expected to equal true - -calling `build_stubbed` with a block - passes the stub instance - returns the stub instance - -inline traits overriding existing attributes - returns the default status - prefers attributes on factories over attributes from non-inline traits - prefers traits on a factory over default attributes - prefers inline trait attributes over traits on a factory - prefers inline trait attributes over default attributes - prefers overridden attributes over attributes from traits, inline traits, or attributes on factories - prefers inline traits over attributes on factories - -a built instance with strategy: :create - assigns and saves associations - is expected to be new record - -create multiple instances - without default attributes - creates all the posts - uses the default factory values - length - is expected to eq 2 - -traits with initialize_with - gives base traits lower priority than overrides - can apply initialize_with from traits - gives additional traits higher priority than base traits and factory definition - can apply initialize_with from the definition - gives base traits normal priority - gives additional traits higher priority than initialize_with from the definition - -overridden primary keys conventions - a stubbed instance with a uuid primary key - has a uuid primary key - behaves like a persisted record - builds a stubbed instance - a stubbed instance with no id setter - builds a stubbed instance - a stubbed instance with no primary key - behaves like a persisted record - builds a stubbed instance - -before build callback - runs the before callback - -including FactoryBot::Syntax::Methods when custom strategies have been declared - allows adding additional strategies - -a generated attributes hash - assigns an overridden value - assigns a default value - doesn't assign associations - assigns a lazy, dependent attribute - -skipping the default create - doesn't execute anything when creating the instance - -initialize_with with a hash argument - builds the object correctly - -traits with callbacks - executes callbacks in the order assigned - when the factory has an implicit trait - name - is expected to eq "JOHN" - when the factory has a trait passed via arguments - name - is expected to eq "JOHN" - -configuring the starting id - defines which id build_stubbed instances start with - -global to_create - handles inline trait override - handles child to_create with trait - handles base to_create - handles child to_create - uses to_create globally across FactoryBot.define - -calling `attributes_for` with a block - returns the hash of attributes - passes the hash of attributes - -create multiple instances - without default attributes - uses the default factory values - creates all the posts - length - is expected to eq 20 - with a block that receives both the object and an index - uses the new values - with a block - uses the new values - with default attributes - overrides the default values - without the count - raise ArgumentError with the proper error message - -multiple creates and transient attributes to dynamically build attribute lists - generates the correct number of posts - allows the number of posts to be modified - -reload - does not reset the value of use_parent_strategy - -global skip_create - honors overridden to_create - honors inline trait to_create - does not persist any record - does not persist child records - -associations overriding :strategy - uses the overridden create strategy to create the association - -traits with to_create - can apply to_create from the definition - gives base traits normal priority - gives additional traits higher priority than base traits and factory definition - gives additional traits higher priority than to_create from the definition - can apply to_create from traits - gives base traits lower priority than overrides - -initialize_with doesn't duplicate assignment on attributes accessed from initialize_with - instantiates the correct object - -using ActiveSupport::Instrumentation to track compile_factory interaction - tracks proper time of compiling the factory - builds the correct payload - when factory with base traits - builds the correct payload - when factory with additional traits - builds the correct payload - -when a self-referential trait is defined - raises a TraitDefinitionError - raises a TraitDefinitionError - -global initialize_with - handles base initialize_with - handles child initialize_with - handles child initialize_with with trait - uses initialize_with globally across FactoryBot.define - handles inline trait override - -Finished in 14.85 seconds (files took 1.36 seconds to load) -427 examples, 0 failures - -Randomized with seed 45079 - -mv ./.gem2deb.Gemfile.lock Gemfile.lock +DEB_BUILD_OPTIONS includes nocheck, skipping all checks (test suite etc). ┌──────────────────────────────────────────────────────────────────────────────┐ │ dh_ruby --install finished │ @@ -2453,12 +1049,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3132604/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/4009283 and its subdirectories -I: Current time: Sat Dec 12 00:34:48 -12 2026 -I: pbuilder-time-stamp: 1797078888 +I: removing directory /srv/workspace/pbuilder/3132604 and its subdirectories +I: Current time: Sun Nov 9 20:12:30 +14 2025 +I: pbuilder-time-stamp: 1762668750