Diff of the two buildlogs: -- --- b1/build.log 2025-01-05 15:19:38.711755579 +0000 +++ b2/build.log 2025-01-05 15:21:28.538735832 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sun Jan 5 03:15:22 -12 2025 -I: pbuilder-time-stamp: 1736090122 +I: Current time: Mon Jan 6 05:19:47 +14 2025 +I: pbuilder-time-stamp: 1736090387 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -29,52 +29,84 @@ 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/16383/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/2157/tmp/hooks/D01_modify_environment starting +debug: Running on virt64z. +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 Jan 5 15:20 /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/2157/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/2157/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='armhf' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=3 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='armhf' + 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]="2" [2]="37" [3]="1" [4]="release" [5]="arm-unknown-linux-gnueabihf") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=armhf + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=4 ' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=arm + HOST_ARCH=armhf IFS=' ' - INVOCATION_ID='b3875565d1d34e76bbcf3a5845a87977' - 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='16383' - PS1='# ' - PS2='> ' + INVOCATION_ID=d6ee7d3ea0c845bbb17a18b4189c0ce8 + LANG=C + LANGUAGE=it_CH:it + LC_ALL=C + MACHTYPE=arm-unknown-linux-gnueabihf + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnueabihf + 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=2157 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.JK5hosKO/pbuilderrc_dCCT --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.JK5hosKO/b1 --logfile b1/build.log ruby-factory-bot_6.4.2-1.dsc' - SUDO_GID='113' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://10.0.0.15:3142/' + 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.JK5hosKO/pbuilderrc_HqzB --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.JK5hosKO/b2 --logfile b2/build.log ruby-factory-bot_6.4.2-1.dsc' + SUDO_GID=110 + SUDO_UID=103 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://10.0.0.15:3142/ I: uname -a - Linux virt32a 6.1.0-28-armmp-lpae #1 SMP Debian 6.1.119-1 (2024-11-22) armv7l GNU/Linux + Linux i-capture-the-hostname 6.1.0-28-arm64 #1 SMP Debian 6.1.119-1 (2024-11-22) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/16383/tmp/hooks/D02_print_environment finished +I: user script /srv/workspace/pbuilder/2157/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -87,7 +119,7 @@ Depends: debhelper-compat (= 13), gem2deb, rake, ruby-activerecord, ruby-activesupport, ruby-rspec, ruby-rspec-its, ruby-sqlite3, ruby-timecop dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. -(Reading database ... 19679 files and directories currently installed.) +(Reading database ... 19675 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: @@ -272,10 +304,10 @@ Get: 144 http://deb.debian.org/debian trixie/main armhf ruby-rspec-its all 1.3.0-1 [6864 B] Get: 145 http://deb.debian.org/debian trixie/main armhf ruby-sqlite3 armhf 1.6.9-2 [47.5 kB] Get: 146 http://deb.debian.org/debian trixie/main armhf ruby-timecop all 0.9.10-1.1 [12.2 kB] -Fetched 43.1 MB in 3s (13.9 MB/s) +Fetched 43.1 MB in 5s (8881 kB/s) Preconfiguring packages ... Selecting previously unselected package libpython3.12-minimal:armhf. -(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 ... 19679 files and directories currently installed.) +(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 ... 19675 files and directories currently installed.) Preparing to unpack .../libpython3.12-minimal_3.12.8-3_armhf.deb ... Unpacking libpython3.12-minimal:armhf (3.12.8-3) ... Selecting previously unselected package libexpat1:armhf. @@ -288,7 +320,7 @@ Setting up libexpat1:armhf (2.6.4-1) ... Setting up python3.12-minimal (3.12.8-3) ... Selecting previously unselected package python3-minimal. -(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 ... 19999 files and directories currently installed.) +(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 ... 19995 files and directories currently installed.) Preparing to unpack .../00-python3-minimal_3.12.8-1_armhf.deb ... Unpacking python3-minimal (3.12.8-1) ... Selecting previously unselected package media-types. @@ -350,7 +382,7 @@ Unpacking libpython3-stdlib:armhf (3.12.8-1) ... Setting up python3-minimal (3.12.8-1) ... Selecting previously unselected package python3. -(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 ... 21062 files and directories currently installed.) +(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 ... 21058 files and directories currently installed.) Preparing to unpack .../000-python3_3.12.8-1_armhf.deb ... Unpacking python3 (3.12.8-1) ... Selecting previously unselected package sensible-utils. @@ -763,8 +795,8 @@ Setting up tzdata (2024b-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Sun Jan 5 15:16:56 UTC 2025. -Universal Time is now: Sun Jan 5 15:16:56 UTC 2025. +Local time is now: Sun Jan 5 15:20:39 UTC 2025. +Universal Time is now: Sun Jan 5 15:20:39 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -892,7 +924,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-factory-bot-6.4.2/ && 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.4.2-1_source.changes +I: user script /srv/workspace/pbuilder/2157/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/2157/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-factory-bot-6.4.2/ && 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.4.2-1_source.changes dpkg-buildpackage: info: source package ruby-factory-bot dpkg-buildpackage: info: source version 6.4.2-1 dpkg-buildpackage: info: source distribution unstable @@ -925,7 +961,7 @@ │ ruby-factory-bot: Installing files and building extensions for ruby3.1 │ └──────────────────────────────────────────────────────────────────────────────┘ -/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20250105-2185-698g95/gemspec +/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20250106-7309-js88o5/gemspec Failed to load /dev/null because it doesn't contain valid YAML hash WARNING: open-ended dependency on activesupport (>= 5.0.0) is not recommended if activesupport is semantically versioned, use: @@ -955,7 +991,7 @@ Name: factory_bot Version: 6.4.2 File: factory_bot-6.4.2.gem -/usr/bin/ruby3.1 -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/d20250105-2185-698g95/factory_bot-6.4.2.gem +/usr/bin/ruby3.1 -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/d20250106-7309-js88o5/factory_bot-6.4.2.gem Failed to load /dev/null because it doesn't contain valid YAML hash /build/reproducible-path/ruby-factory-bot-6.4.2/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.4.2/lib/factory_bot.rb /build/reproducible-path/ruby-factory-bot-6.4.2/debian/ruby-factory-bot/usr/share/rubygems-integration/all/gems/factory_bot-6.4.2/lib/factory_bot/aliases.rb @@ -1042,522 +1078,522 @@ mv Gemfile.lock ./.gem2deb.Gemfile.lock /usr/bin/ruby3.1 -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 36821 +Randomized with seed 52577 -FactoryBot::NullObject - responds to the given methods - does not respond to other methods - -FactoryBot::Factory when defined with a custom class name - has a build_class equal to its custom class name - -FactoryBot::Attribute::Sequence - assigns the next value in the sequence - name - is expected to eq :first_name +FactoryBot::DefinitionProxy adding callbacks + adding an :after_build callback succeeds + adding an :after_create callback succeeds + adding both an :after_stub and an :after_create callback succeeds + adding an :after_stub callback succeeds + adding both an :after_stub and a :before_create callback succeeds + adding both a :before_stub and a :before_create callback succeeds FactoryBot::Declaration::Dynamic #== - when comparing against another type of object - the objects are NOT equal - when the names are different - the objects are NOT equal when the attributes are equal the objects are equal + when the blocks are different + the objects are NOT equal when one is ignored and the other isn't the objects are NOT equal - when the blocks are different + when comparing against another type of object + the objects are NOT equal + when the names are different the objects are NOT equal -FactoryBot::Factory when defined with a class instead of a name - has a build_class - has a name - -FactoryBot - finds a registered strategy - .use_parent_strategy - is true by default +FactoryBot::Factory human names + parses names with underscores + parses names without underscores + parses human names without underscores + parses names with big letters + parses human names with big letters + parses human names with underscores + parses names with aliases + parses human names with aliases -FactoryBot::Callback - converts strings to symbols - runs its block with one parameter - runs its block with no parameters - runs its block with two parameters - has a name +FactoryBot::AttributeList filter based on ignored attributes + filters #non_ignored attributes + filters #ignored attributes definition loading - with factories.rb - it should behave like finds definitions - is expected to load definitions from factories.rb - with nested and unnested factories files under spec - it should behave like finds definitions - is expected to load definitions from spec/factories.rb - is expected to load definitions from spec/factories/post_factory.rb - is expected to load definitions from spec/factories/person_factory.rb - with a factories file under spec - it should behave like finds definitions - is expected to load definitions from spec/factories.rb - with several factories files under spec/factories - 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 - 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 test - it should behave like finds definitions - is expected to load definitions from test/factories.rb with several factories files under test/factories in non-alphabetical order loads the files in the right order + 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 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/person_factory.rb is expected to load definitions from test/factories/post_factory.rb + is expected to load definitions from test/factories.rb 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 test/factories + with a factories file under spec it should behave like finds definitions - is expected to load definitions from test/factories/post_factory.rb - is expected to load definitions from test/factories/person_factory.rb + is expected to load definitions from spec/factories.rb + with a factories file under test + it should behave like finds definitions + is expected to load definitions from test/factories.rb + with several factories files under spec/factories in non-alphabetical order + loads the files in the right order + with nested and unnested factories files under spec + it should behave like finds definitions + is expected to load definitions from spec/factories.rb + is expected to load definitions from spec/factories/person_factory.rb + 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 + is expected to load definitions from test/factories/subdirectory/person_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 several factories files under spec/factories in non-alphabetical order - loads the files in the right order - -FactoryBot::Attribute::Association with a string name - name - is expected to eq :name - -FactoryBot::DefinitionProxy#method_missing - declares an implicit declaration when called without args or a block - declares an association when called with a ':factory' key - declares a dynamic attribute when called with a block - raises a NoMethodError when called with a static-attribute-like argument (PENDING: No reason given) - -FactoryBot::Strategy::Create - runs a custom create block - 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 - runs the callbacks [:after_build, :before_create, :after_create] with the evaluation's object - returns the object from the evaluation - -FactoryBot::Factory when given a class that overrides #to_s - sets build_class correctly - -FactoryBot::Factory with a name ending in s - has a name - has a build class - -FactoryBot::Attribute::Association - builds the association when calling the proc - builds the association when calling the proc - is expected to be association - name - is expected to eq :author - -FactoryBot::Factory when defined with a custom class - is an instance of that custom class - -FactoryBot::Factory human names - parses names with aliases - parses human names with underscores - parses human names without underscores - parses names with underscores - parses human names with aliases - parses names with big letters - parses names without underscores - parses human names with big letters + 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 factories.rb + it should behave like finds definitions + is expected to load definitions from factories.rb + with several factories files under spec/factories + 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 -FactoryBot::DefinitionProxy#sequence - creates a new sequence with a block - creates a new sequence starting at 1 - creates a new sequence with an overridden starting value +FactoryBot::DefinitionProxy#trait + declares a trait -FactoryBot::AttributeList#define_attribute - returns the attribute - raises if an attribute has already been defined - maintains a list of attributes +FactoryBot::Attribute + is not an association + converts the name attribute to a symbol FactoryBot::Internal - .sequence_by_name - finds a registered sequence - .register_sequence - returns the registered sequence - registers the provided sequence - .register_strategy - register the provided strategy name with the class .register_factory registers the provided factory returns the registered factory - .rewind_sequences - rewinds the sequences and the internal sequences + .trait_by_name + finds a previously registered trait .strategy_by_name finds a registered strategy - .register_trait - registers the provided trait - returns the registered trait .factory_by_name finds a registered factory - .register_factory - returns the registered factory - registers the provided factory - .trait_by_name - finds a previously registered trait .factory_by_name finds a registered factory + .rewind_sequences + rewinds the sequences and the internal sequences + .register_factory + registers the provided factory + returns the registered factory + .sequence_by_name + finds a registered sequence + .register_strategy + register the provided strategy name with the class + .register_trait + returns the registered trait + registers the provided trait + .register_sequence + registers the provided sequence + returns the registered sequence -FactoryBot::Declaration::Association - #== - when the options are different - the objects are NOT equal - when the names are different - the objects are NOT equal - when the attributes are equal - the objects are equal - when comparing against another type of object - the objects are NOT equal +FactoryBot::AttributeList#associations + returns associations -FactoryBot::Decorator::DisallowsDuplicatesRegistry - delegates #register to the registry when not registered - raises when attempting to #register a previously registered strategy +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::DeclarationList#attributes + returns an AttributeList + defines each attribute on the attribute list -FactoryBot::Strategy::AttributesFor - does not run the to_create block - returns the hash from the evaluation - it should behave like strategy without association support - returns nil when accessing an association +FactoryBot::AttributeList generating names + knows all its #names for #non_ignored attributes + knows all its #names + knows all its #names for #associations + knows all its #names for #ignored attributes -FactoryBot::DefinitionProxy#factory - without options - with a block - with options +FactoryBot::DefinitionProxy#sequence + creates a new sequence with a block + creates a new sequence starting at 1 + creates a new sequence with an overridden starting value -FactoryBot::Attribute::Dynamic - name - is expected to eq :first_name - with a block returning a static value - returns the value when executing the proc - with a block returning its block-level variable - returns self when executing the proc - with a block referencing an attribute on the attribute - evaluates the attribute from the attribute - with a block returning a sequence - raises a sequence abuse error +FactoryBot::Factory + creates a new factory while overriding the parent class + includes associations from the parent factory + guesses the build class from the factory name + has a factory name + creates a new factory using the class of the parent + has a build class + returns associations + overriding an attribute with an alias + discards the predefined value for the attribute + uses the passed in value for the alias + when overriding generated attributes with a hash + overrides a symbol parameter with a string parameter + returns the overridden value in the generated attributes -FactoryBot::Strategy::Build - 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::Create + runs a custom create block + 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 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::EvaluatorClassDefiner + evaluates the block in the context of the evaluator + adds each attribute to the evaluator + sets attributes on the evaluator class + 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::Attribute::Dynamic with a string name + name + is expected to eq :name + +FactoryBot::AttributeList#define_attribute + returns the attribute + maintains a list of attributes + raises if an attribute has already been defined FactoryBot::DefinitionProxy#to_create accepts a block to run in place of #save! -FactoryBot::Definition - has an overridable declaration list - creates a new attribute list with the name passed when given a name - maintains a list of traits - maintains a list of callbacks - maintains a list of enum fields - doesn't expose a separate create strategy when none is specified - delegates :declare_attribute to declarations - exposes a non-default create strategy when one is provided by the user +FactoryBot::Callback + runs its block with two parameters + converts strings to symbols + runs its block with one parameter + runs its block with no parameters has a name - adds only unique traits FactoryBot::Sequence a custom scope increments within the correct scope after rewinding - a custom sequence and scope increments within the correct scope a custom sequence and scope increments within the correct scope when incrementing - a custom 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 custom value and aliases - has the expected names as its names + a custom sequence and scope increments within the correct scope + a custom sequence 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 + 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 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 - a basic sequence - names - is expected to eq [:test] + a sequence with aliases using default value + 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 1st value after rewinding has a next value equal to the 2nd value after being incremented + a basic sequence + names + is expected to eq [:test] name is expected to eq :test - a basic 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 the 2nd value after being incremented has a next value equal to its first value - a sequence with aliases using default value - has the expected names as its names + has a next value equal to the 2nd value after being incremented + a custom sequence without a block behaves like a sequence has a next value equal to the 2nd value after being incremented - has a next value equal to its first value has a next value equal to the 1st value after rewinding - a custom sequence + has a next value equal to its first value + 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 1st value after rewinding + 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 - -FactoryBot::Registry - does not include duplicate objects with registered under different names - knows that an object is registered by string - adds and returns the object registered - clears registered factories - includes a did_you_mean message - raises when an object cannot be found - finds a registered object - finds a registered object with square brackets - is an enumerable - iterates registered objects - knows when an object is not registered - knows that an object is registered by symbol + has a next value equal to the 1st value after rewinding 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::Declaration::Implicit - #== - 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 names are different - the objects are NOT equal - when the factories are different - the objects are NOT equal - when the attributes are equal - the objects are equal - with a known factory - creates an association attribute - has the correct factory name - with a known sequence - does not create an association attribute - creates a sequence attribute +FactoryBot::DeclarationList#declare_attribute + deletes declarations with the same name when overridable + adds the declaration to the list when overridable + appends declarations with the same name when NOT overridable + adds the declaration to the list when not overridable -FactoryBot::DeclarationList#attributes - defines each attribute on the attribute list - returns an AttributeList +FactoryBot::NullObject + does not respond to other methods + responds to the given methods -FactoryBot::Factory with a string for a name +FactoryBot::Attribute::Sequence + assigns the next value in the sequence + name + is expected to eq :first_name + +FactoryBot::Attribute::Dynamic + name + is expected to eq :first_name + 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 + with a block returning a sequence + raises a sequence abuse error + with a block returning its block-level variable + returns self when executing the proc + +FactoryBot::DefinitionProxy#method_missing + declares an association when called with a ':factory' key + declares a dynamic attribute when called with a block + raises a NoMethodError when called with a static-attribute-like argument (PENDING: No reason given) + declares an implicit declaration when called without args or a block + +FactoryBot::Factory when defined with a class instead of a name has a name + has a build_class -FactoryBot::Factory - has a factory name - creates a new factory while overriding the parent class - returns associations - guesses the build class from the factory name - has a build class - creates a new factory using the class of the parent - includes associations from the parent factory - overriding an attribute with an alias - discards the predefined value for the attribute - uses the passed in value for the alias - when overriding generated attributes with a hash - returns the overridden value in the generated attributes - overrides a symbol parameter with a string parameter +FactoryBot::Factory when defined with a custom class + is an instance of that custom class -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::DefinitionProxy#factory + without options + with options + with a block -FactoryBot::EvaluatorClassDefiner - 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 - sets attributes on the evaluator class - with a custom evaluator as a parent class - bases its attribute lists on itself and its parent evaluator +FactoryBot::Attribute::Association + builds the association when calling the proc + builds the association when calling the proc + is expected to be association + name + is expected to eq :author -FactoryBot::DefinitionProxy#initialize_with - defines the constructor on the definition +FactoryBot::Declaration::Association + #== + when the names are different + the objects are NOT equal + when the attributes are equal + the objects are equal + when comparing against another type of object + the objects are NOT equal + when the options are different + the objects are NOT equal -FactoryBot::DeclarationList#declare_attribute - adds the declaration to the list when not overridable - adds the declaration to the list when overridable - appends declarations with the same name when NOT overridable - deletes declarations with the same name when overridable +FactoryBot::Definition + maintains a list of traits + has an overridable declaration list + exposes a non-default create strategy when one is provided by the user + maintains a list of enum fields + doesn't expose a separate create strategy when none is specified + creates a new attribute list with the name passed when given a name + delegates :declare_attribute to declarations + maintains a list of callbacks + has a name + adds only unique traits + +FactoryBot::AttributeList#apply_attributes + adds attributes in the order defined FactoryBot::Factory running a factory calls the block and returns the result returns the result from the strategy when running creates the right strategy using the build class when running -FactoryBot::DefinitionProxy#association - declares an association - when passing a block raises an error - declares an association with options +FactoryBot::Decorator::AttributeHash + #attributes + returns a hash of attributes + with an attribute called 'attributes' + does not call itself recursively -FactoryBot::AttributeList filter based on ignored attributes - filters #non_ignored attributes - filters #ignored attributes +FactoryBot::Registry + iterates registered objects + knows when an object is not registered + includes a did_you_mean message + finds a registered object with square brackets + clears registered factories + finds a registered object + adds and returns the object registered + does not include duplicate objects with registered under different names + knows that an object is registered by string + knows that an object is registered by symbol + is an enumerable + raises when an object cannot be found 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::Strategy::Stub + it should behave like strategy with strategy: :build + finds the factory with the correct factory name + runs the factory with the correct overrides asking for a result + is expected not to be destroyed is expected to be persisted is expected not to be new record - is expected not to be destroyed assigns created_at - overriding persistence method: #delete - overrides the method with any arity - raises an informative error if the method is called - overriding persistence method: #touch + overriding persistence method: #update_attributes! raises an informative error if the method is called overrides the method with any arity - overriding persistence method: #decrement! + overriding persistence method: #toggle! overrides the method with any arity raises an informative error if the method is called - overriding persistence method: #increment! + overriding persistence method: #save! + 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! + overriding persistence method: #decrement! raises an informative error if the method is called overrides the method with any arity - overriding persistence method: #save + overriding persistence method: #delete overrides the method with any arity raises an informative error if the method is called overriding persistence method: #update_attribute raises an informative error if the method is called overrides the method with any arity - overriding persistence method: #update! + overriding persistence method: #destroy! raises an informative error if the method is called overrides the method with any arity - overriding persistence method: #update_attributes! + overriding persistence method: #connection overrides the method with any arity raises an informative error if the method is called - overriding persistence method: #update + overriding persistence method: #reload overrides the method with any arity raises an informative error if the method is called - overriding persistence method: #destroy + overriding persistence method: #save raises an informative error if the method is called overrides the method with any arity - overriding persistence method: #reload - 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 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: #toggle! + overriding persistence method: #destroy raises an informative error if the method is called overrides the method with any arity overriding persistence method: #update_columns overrides the method with any arity raises an informative error if the method is called - overriding persistence method: #connection + overriding persistence method: #update 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 + overriding persistence method: #update! 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 - 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 strategy: :build - 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_stub] with the evaluation's object + it should behave like strategy with association support + runs the factory with the correct overrides + finds the factory with the correct factory name -FactoryBot::Decorator::AttributeHash - #attributes - returns a hash of attributes - with an attribute called 'attributes' - does not call itself recursively +FactoryBot aliases + for a foreign key should include both the suffixed and un-suffixed variants + for an attribute should include the original attribute and a version suffixed with '_id' + for an attribute which starts with an underscore should not include a non-underscored version -FactoryBot::Attribute::Dynamic with a string name +FactoryBot + finds a registered strategy + .use_parent_strategy + is true by default + +FactoryBot::DefinitionProxy#transient + makes all attributes added ignored + +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#initialize_with + defines the constructor on the definition + +FactoryBot::Decorator::DisallowsDuplicatesRegistry + delegates #register to the registry when not registered + raises when attempting to #register a previously registered strategy + +FactoryBot::Declaration::Implicit + with a known sequence + creates a sequence attribute + does not create an association attribute + #== + when comparing against another type of object + the objects are NOT equal + when the factories are different + the objects are NOT equal + when one is ignored and the other isn't + the objects are NOT equal + when the attributes are equal + the objects are equal + when the names are different + the objects are NOT equal + with a known factory + has the correct factory name + creates an association attribute + +FactoryBot::Attribute::Association with a string name name is expected to eq :name -FactoryBot::StrategyCalculator - returns the strategy found when instantiated with a symbol - finds the strategy by name when instantiated with a symbol - returns the class passed when it is instantiated with a class +FactoryBot::Factory with a name ending in s + has a build class + has a name -FactoryBot::AttributeList#associations - returns associations +FactoryBot::Factory when defined with a custom class name + has a build_class equal to its custom class name -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::Factory when given a class that overrides #to_s + sets build_class correctly -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::Factory with a string for a name + has a name -FactoryBot::DefinitionProxy#transient - makes all attributes added ignored +FactoryBot::DefinitionProxy#association + declares an association + declares an association with options + when passing a block raises an error -FactoryBot::DefinitionProxy#trait - declares a trait +FactoryBot::Strategy::AttributesFor + does not run the to_create block + returns the hash from the evaluation + it should behave like strategy without association support + returns nil when accessing an association -FactoryBot::Attribute - converts the name attribute to a symbol - is not an association +FactoryBot::Strategy::Build + it should behave like strategy with callbacks + returns the object from the evaluation + runs the callbacks [:after_build] with the evaluation's object + 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 strategy: :build + runs the factory with the correct overrides + finds the factory with the correct factory name FactoryBot::NullFactory + delegates attributes to its definition + has an instance of FactoryBot::AttributeList for its attributes attribute delegates defined traits to its definition - has a nil value for its class_name attribute - has FactoryBot::Evaluator as its evaluator class has a nil value for its compile attribute - has an instance of FactoryBot::AttributeList for its attributes attribute - delegates constructor to its definition - delegates attributes to its definition delegates callbacks to its definition + has FactoryBot::Evaluator as its evaluator class + has a nil value for its class_name attribute + delegates constructor to its definition -FactoryBot::DefinitionProxy adding callbacks - adding both an :after_stub and an :after_create callback succeeds - adding an :after_build callback succeeds - adding an :after_create callback succeeds - adding both an :after_stub and a :before_create callback succeeds - adding both a :before_stub and a :before_create callback succeeds - adding an :after_stub callback succeeds - -FactoryBot aliases - for an attribute should include the original attribute and a version suffixed with '_id' - 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 +FactoryBot::StrategyCalculator + 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 Pending: (Failures listed here are expected and do not affect your suite's status) @@ -1565,88 +1601,347 @@ # No reason given # ./spec/factory_bot/definition_proxy_spec.rb:66 -Finished in 2.54 seconds (files took 2.93 seconds to load) +Finished in 1.45 seconds (files took 1.04 seconds to load) 290 examples, 0 failures, 1 pending -Randomized with seed 36821 +Randomized with seed 52577 /usr/bin/ruby3.1 -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 61958 +Randomized with seed 52421 -associations overriding :strategy - uses the overridden create strategy to create the association +trait indifferent access + when trait is defined as integer + can be invoked with as integer + can be invoked with a string + 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 a symbol + can be invoked with a symbol + can be invoked with a string -a created instance, specifying strategy: :build - saves associations (strategy: :build only affects build, not create) +traits added via strategy + adding traits in create + doesn't modify the user factory + name + is expected to eq "JOE" + admin + is expected to equal true + adding traits in build_list + builds all the records + length + is expected to eq 2 + adding traits in build_stubbed + admin + is expected to equal true + name + is expected to eq "Jack" + adding traits in create_list + creates all the records + length + is expected to eq 2 + adding traits in build + admin + is expected to equal true + name + is expected to eq "Joe" + adding traits in attributes_for + [:name] + is expected to eq "John" + [:admin] + is expected to equal true + +initialize_with with FG attributes that are transient + name + is expected to eq "Handsome Chap from .construct" + +setting private attributes + raises a NoMethodError + +FactoryBot.rewind_sequences + allows setting sequences within identically named traits + resets inline sequences back to their starting value + resets all sequences back to their starting values + does not collide with globally registered factories + still allows global sequences prefixed with a factory name modifying inherited factories with traits - returns the correct value for overridden attributes from traits returns the correct value for overridden attributes from traits defining multiple attributes allows modification of attributes created via traits + returns the correct value for overridden attributes from traits -including FactoryBot::Syntax::Methods when custom strategies have been declared - allows adding additional strategies +`attributes_for` for a class whose constructor has required params + [:name] + is expected to eq "John Doe" -calling methods on the model instance - without the attribute being overridden - returns the correct value from the instance - doesn't instantiate a record with attributes_for - returns nil during attributes_for - with the referenced attribute being overridden - uses the overridden value during attributes_for - uses the overridden value - with the attribute being overridden - uses the overridden value - uses the overridden value during attributes_for +a stubbed instance overriding strategy + assigns associations and acts as if it is saved + acts as if it is saved in the database -a created instance - assigns and saves associations - is expected not to be new record +inline traits overriding existing attributes + prefers inline trait attributes over traits on a factory + prefers overridden attributes over attributes from traits, inline traits, or attributes on factories + returns the default status + prefers traits on a factory over default attributes + prefers attributes on factories over attributes from non-inline traits + prefers inline trait attributes over default attributes + prefers inline traits over attributes on factories -associations - when building collection associations - builds the association according to the given strategy - when building interrelated associations - assigns the instance passed as an association attribute - connects records with interdependent relationships - when accidentally using an implicit declaration as an override - raises an error - when accidentally using an implicit declaration for the factory - raises an error +nested implicit traits + defined inside the factory + it should behave like assigning data from traits + assigns the correct values + defined outside the factory + it should behave like assigning data from traits + assigns the correct values + +syntax methods within dynamic attributes + allows syntax methods to be used when the block has an arity of 1 + can access syntax methods from dynamic attributes + can access syntax methods from dynamic attributes + can access methods already existing on the class + +calling `create` with a block + returns the created instance + passes the created instance + +enum traits + when automatically_define_enum_traits is true + 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 + prefers user defined traits over automatically built traits + 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 + +overridden primary keys conventions + a stubbed instance with a uuid primary key + builds a stubbed instance + behaves like a persisted record + has a uuid primary key + a stubbed instance with no primary key + behaves like a persisted record + builds a stubbed instance + +configuring the starting id + defines which id build_stubbed instances start with + +applying inline traits + applies traits only to the instance generated for that call + +initialize_with doesn't duplicate assignment on attributes accessed from initialize_with + instantiates the correct object + +sequences + generates few values of the sequence + generates aliases for the sequence that reference the same block + generates aliases for the sequence that reference the same block and retains value + generates several values in the correct format + generates sequential numbers if no block is given + +initialize_with for a constructor that requires a block + executes the block correctly + +aliases and overrides + two + is expected to be nil + one + is expected to eq "override" calling `attributes_for` with a block - passes the hash of attributes returns the hash of attributes + passes the hash of attributes -looking up traits that don't exist - when the factory includes an invalid default trait - raises a KeyError including the factory name - maintains 'Did you mean?' suggestions at the end of the error message - when a trait includes an invalid default trait - raises a KeyError including the factory name - when passing an invalid override trait - raises a KeyError +transient attributes + returning attributes for a factory + is expected not to have key :four + is expected to have key :email + is expected not to have key :rockstar + is expected not to have key :upcased + is expected to have key :name + without transient variables assigned + uses the default value of the attribute + with a transient variable assigned + generates the correct attributes on a rockstar + generates the correct attributes on an upcased rockstar + generates the correct attributes on a groupie + generates the correct attributes on a rockstar with a name + +a built instance with strategy: :create + assigns and saves associations + is expected to be new record + +finding factories keyed by class instead of symbol + doesn't find the factory + +defaulting `updated_at` + allows assignment of updated_at + defaults updated_at for objects with updated_at + is doesn't mark the object as changed + behaves the same as a non-stubbed updated_at + allows overriding updated_at for objects with updated_at + doesn't allow setting updated_at on an object that doesn't define it + doesn't add updated_at to objects who don't have the method + +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 + +traits and dynamic attributes that are applied simultaneously + combined + is expected to eq "John " + email + is expected to eq "John@example.com" + name + is expected to eq "John" + +#add_attribute + assigns attributes for reserved words on .build + assigns attributes for reserved words on .attributes_for + +a created instance + is expected not to be new record + assigns and saves associations + +a generated attributes hash where order matters + factory with a parent + assigns attributes in the order they're defined + factory without a parent + assigns attributes in the order they're defined without a parent class + +initialize_with with an 'attributes' attribute + assigns attributes correctly + +reload + does not reset the value of use_parent_strategy + +transient sequences + increments sequences correctly + +callbacks using Symbol#to_proc + runs the callback correctly + +traits with initialize_with + gives base traits normal priority + gives additional traits higher priority than initialize_with from the definition + 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 + +using ActiveSupport::Instrumentation to track run_factory interaction + builds the correct payload + tracks proper time of creating the record + +global skip_create + does not persist child records + does not persist any record + honors overridden to_create + honors inline trait to_create + +implicit traits containing callbacks + only runs the callback once + +initialize_with has access to all attributes for construction + assigns attributes correctly + +a created instance, specifying strategy: :build + saves associations (strategy: :build only affects build, not create) an instance generated by a factory registers the user factory -traits used in associations - allows assigning traits for the factory of an association - allows inline traits with a specific factory for an association - allows inline traits with the default association +defining a child factory before a parent + creates admin factories correctly -initialize_with with non-FG attributes - age - is expected to eq 21 - name - is expected to eq "John Doe" +a stubbed instance + assigns associations and acts as if it is saved + acts as if it came from the database -initialize_with non-ORM-backed objects - generates random data - allows for overrides +a built instance + is expected to be new record + when the :use_parent_strategy config option is set to true + assigns but does not save associations + when the :use_parent_strategy config option is set to false + assigns and saves associations + +initialize_with implicit constructor + instantiates the correct object + +create multiple instances + with a block that receives both the object and an index + uses the new values + with a block + uses the new values + without the count + raise ArgumentError with the proper error message + with default attributes + overrides the default values + without default attributes + uses the default factory values + creates all the posts + length + is expected to eq 20 + +an instance generated by a factory that inherits from another factory + the child class redefining parent's attributes + is expected to be admin + is expected to be a kind of User(id: integer, name: string, admin: boolean, email: string, upper_email: string, login: string) + name + is expected to eq "admin" + upper_email + is expected to eq "ADMIN@EXAMPLE.COM" + login + is expected to eq "admin@example.com" + email + is expected to eq "admin@example.com" + the parent class + is expected not to be admin + name + is expected to eq "John" + email + is expected to eq "john@example.com" + login + is expected to eq "john@example.com" + +associations overriding :strategy + uses the overridden create strategy to create the association + +multiple creates and transient attributes to dynamically build attribute lists + allows the number of posts to be modified + generates the correct number of posts + +when a self-referential trait is defined + raises a TraitDefinitionError + raises a TraitDefinitionError an instance generated by a factory with multiple traits + 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 + gender + is expected to eq "Male" + name + is expected to eq "Joe" + factory using global trait + email + is expected to eq "Bill@example.com" + name + is expected to eq "Bill" the child with multiple traits is expected to be admin gender @@ -1655,679 +1950,420 @@ is expected to eq "Jane" the other child class with one trait is expected not to be admin + gender + is expected to eq "Female" name is expected to eq "Jane" + child class with scoped trait and inherited trait + is expected to be admin + name + is expected to eq "Judy" gender is expected to eq "Female" - the parent class - is expected not to be admin - name - is expected to eq "John" + child factory using grandparents' trait + great + is expected to eq "GREAT!!!" + the child class with one trait + is expected to be admin gender is expected to be nil + name + is expected to eq "John" 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 - the child with multiple traits who override the same attribute - when the male assigns name after female - is expected to be admin - name - is expected to eq "Joe" - gender - is expected to eq "Male" - when the female assigns name after male - is expected to be admin - name - is expected to eq "Jane" - gender - is expected to eq "Female" - child factory using grandparents' trait - great - is expected to eq "GREAT!!!" - child class with scoped trait and inherited trait - is expected to be admin + child factory created where trait attributes are inherited + date_of_birth + is expected to eq Sat, 01 Jan 2000 gender - is expected to eq "Female" - name - is expected to eq "Judy" + is expected to eq "Male" factory with trait defined multiple times child factory redefining trait great is expected to eq "EVEN GREATER!!!" great is expected to eq "GREAT!!!" - child factory created where trait attributes are inherited + the parent class + is expected not to be admin + name + is expected to eq "John" gender - is expected to eq "Male" - date_of_birth - is expected to eq Sat, 01 Jan 2000 + is expected to be nil 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 using global trait - email - is expected to eq "Bill@example.com" - name - is expected to eq "Bill" - the child class with one trait - is expected to be admin - name - is expected to eq "John" gender - is expected to be nil + is expected to eq "Male" -attribute overrides - with a non-admin posting - secure - is expected to be nil - with an admin posting - secure - is expected to eq false - with no user posting - secure - is expected to be nil +declaring attributes on a Factory that are private methods on Object + sleep + is expected to eq -5 + link + is expected to eq "http://example.com" + system + is expected to eq false -association assignment from nested attributes - assigns the correct amount of comments when overridden - assigns the correct amount of comments +calling `build_stubbed` with a block + passes the stub instance + returns the stub instance -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" +global to_create + handles base to_create + handles child to_create with trait + uses to_create globally across FactoryBot.define + handles inline trait override + handles child to_create -initialize_with doesn't duplicate assignment on attributes accessed from initialize_with - instantiates the correct object +custom callbacks + runs a custom callback without prepending before or after when the proper strategy executes + runs a custom after callback when the proper strategy executes + runs a custom before callback when the proper strategy executes + +sequences are evaluated in the correct context + invokes a method with no arguments on the instance + invokes the correct method on the instance + builds a sequence calling sprintf correctly + allows direct reference of a method in a sequence + +build multiple instances + with a block that receives both the object and an index + correctly uses the set value + with default attributes + overrides the default values + with a block + 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 + +a custom create + uses the custom create block instead of save + +defaulting `id` + allows overriding id + +attribute aliases + assigning an association by passing factory + assigns attributes correctly + assigning an association by foreign key + doesn't assign both an association and its foreign key + +assigning overrides that are also private methods on object + more_format + is expected to eq "format: Great" + format + is expected to eq "Great" + y + is expected to eq 12345 + some_funky_method + is expected to eq "foobar!" + +a custom create passing in an evaluator + passes the evaluator to the custom create block + +an instance generated by a factory named a camel case string + registers the UserModel factory + +a generated stub instance + disables save + disables increment! + allows toggle + disables update_attribute + assigns an overridden attribute + disables connection + disables toggle! + assigns associations + has an id + disables decrement! + disables reload + assigns a default attribute + allows decrement + allows increment + generates unique ids + disables destroy + assigns associations that aren't new records + isn't a new record + isn't changed + +traits with to_create + can apply to_create from the definition + gives base traits normal priority + gives additional traits higher priority than to_create from the definition + gives base traits lower priority than overrides + gives additional traits higher priority than base traits and factory definition + can apply to_create from traits + +a generated attributes hash + assigns an overridden value + assigns a default value + doesn't assign associations + assigns a lazy, dependent attribute + +an instance generated by a factory with a custom class name + is expected to be a kind of User(id: integer, admin: boolean) + is expected to be admin + +Ruby 3.0: attributes_for destructuring syntax + supports being destructured + +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 + +using ActiveSupport::Instrumentation to track compile_factory interaction + builds the correct payload + tracks proper time of compiling the factory + when factory with base traits + builds the correct payload + when factory with additional traits + builds the correct payload + +traits used in associations + allows assigning traits for the factory of an association + allows inline traits with a specific factory for an association + allows inline traits with the default association + +attributes defined using Symbol#to_proc + assigns value with override correctly + assigns values correctly + assigns overridden value correctly + +including FactoryBot::Syntax::Methods when custom strategies have been declared + allows adding additional strategies modifying factories + raises an exception if the factory was not defined before doesn't overwrite already defined child's attributes allows for overriding child classes - raises an exception if the factory was not defined before - reusing traits - email - is expected to eq "Johnny Rockstar!!!@example.com" - name - is expected to eq "Johnny Rockstar!!!" - login - is expected to eq "JOHNNY ROCKSTAR!!!" simple modification - doesn't allow the factory to be subsequently defined does allow the factory to be subsequently modified + doesn't allow the factory to be subsequently defined name is expected to eq "Great User" login is expected to eq "GREAT USER" - adding callbacks - login - is expected to be nil - name - is expected to eq "great user" redefining attributes - creating admin - overriding the email + creating user + without overrides name is expected to eq "Great User" email - is expected to eq "perfect@example.com" - admin - is expected to equal true + is expected to eq "Great User-modified@example.com" overriding the name - admin - is expected to equal true name is expected to eq "wonderful" email is expected to eq "wonderful-modified@example.com" - without overrides - admin - is expected to equal true - email - is expected to eq "Great User-modified@example.com" + overriding the email name is expected to eq "Great User" - creating user - overriding the email email is expected to eq "perfect@example.com" + creating admin + without overrides + admin + is expected to equal true name is expected to eq "Great User" - without overrides email is expected to eq "Great User-modified@example.com" - name - is expected to eq "Great User" overriding the name name is expected to eq "wonderful" + admin + is expected to equal true email is expected to eq "wonderful-modified@example.com" - -defaulting `id` - allows overriding id - -callbacks using syntax methods without referencing FactoryBot explicitly - works when the callback has two variables - works when the callback has one variable - works when the callback has no variables - -`attributes_for` for a class whose constructor has required params - [:name] - is expected to eq "John Doe" - -initialize_with with a hash argument - builds the object correctly - -attribute aliases - assigning an association by foreign key - doesn't assign both an association and its foreign key - assigning an association by passing factory - assigns attributes correctly - -inline traits overriding existing attributes - prefers inline trait attributes over default attributes - prefers attributes on factories over attributes from non-inline traits - returns the default status - prefers overridden attributes over attributes from traits, inline traits, or attributes on factories - prefers inline trait attributes over traits on a factory - prefers traits on a factory over default attributes - prefers inline traits over attributes on factories - -traits added via strategy - adding traits in build - name - is expected to eq "Joe" - admin - is expected to equal true - adding traits in create - doesn't modify the user factory - admin - is expected to equal true + overriding the email + admin + is expected to equal true + email + is expected to eq "perfect@example.com" + name + is expected to eq "Great User" + adding callbacks name - is expected to eq "JOE" - adding traits in build_stubbed + is expected to eq "great user" + login + is expected to be nil + reusing traits name - is expected to eq "Jack" - admin - is expected to equal true - adding traits in attributes_for - [:name] - is expected to eq "John" - [:admin] - is expected to equal true - adding traits in create_list - creates all the records - length - is expected to eq 2 - adding traits in build_list - builds all the records - length - is expected to eq 2 - -trait indifferent access - when trait is defined as a symbol - 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 string - can be invoked with a symbol - can be invoked with a string - when trait is defined as struct - can be invoked with a string - can be invoked with a struct - -create multiple instances - without default attributes - creates all the posts - uses the default factory values - length - is expected to eq 2 - -Ruby 3.0: attributes_for destructuring syntax - supports being destructured - -FactoryBot.rewind_sequences - does not collide with globally registered factories - allows setting sequences within identically named traits - still allows global sequences prefixed with a factory name - resets inline sequences back to their starting value - resets all sequences back to their starting values - -a generated attributes hash where order matters - factory with a parent - assigns attributes in the order they're defined - factory without a parent - assigns attributes in the order they're defined without a parent class - -making sure the factory is properly compiled the first time we want to instantiate it - can honor traits on the very first call - -applying inline traits - applies traits only to the instance generated for that call - -initialize_with implicit constructor - instantiates the correct object - -a custom create passing in an evaluator - passes the evaluator to the custom create block - -global callbacks - triggers after build callbacks for all factories - -calling `create` with a block - passes the created instance - returns the created instance + is expected to eq "Johnny Rockstar!!!" + email + is expected to eq "Johnny Rockstar!!!@example.com" + login + is expected to eq "JOHNNY ROCKSTAR!!!" FactoryBot.lint + does not raise when all factories are valid allows for selective linting raises when a factory is invalid - does not raise when all factories are valid + verbose linting + prints the backtrace for each factory error trait validation disabled does not raises if a trait produces an invalid object enabled - does not raise if a trait produces a valid object raises if a trait produces an invalid object + does not raise if a trait produces a valid object factory strategy for linting uses the requested strategy during trait validation uses the requested strategy - verbose linting - prints the backtrace for each factory error - -finding factories keyed by class instead of symbol - doesn't find the factory - -a generated stub instance - allows decrement - disables decrement! - assigns associations - generates unique ids - allows increment - disables update_attribute - disables connection - assigns an overridden attribute - isn't changed - disables toggle! - disables reload - allows toggle - disables increment! - assigns associations that aren't new records - isn't a new record - has an id - disables save - disables destroy - assigns a default attribute - -sequences are evaluated in the correct context - allows direct reference of a method in a sequence - invokes a method with no arguments on the instance - invokes the correct method on the instance - builds a sequence calling sprintf correctly - -binding a callback to multiple callbacks - binds the callback to stubbing - binds the callback to creation - does not bind the callback to building - -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 admin - is expected to be a kind of User(id: integer, name: string, admin: boolean, email: string, upper_email: string, login: string) - upper_email - is expected to eq "ADMIN@EXAMPLE.COM" - login - is expected to eq "admin@example.com" - name - is expected to eq "admin" - email - is expected to eq "admin@example.com" - -initialize_with with an 'attributes' attribute - assigns attributes correctly - -defining methods inside FactoryBot - raises with a meaningful message - -traits with to_create - gives base traits lower priority than overrides - gives additional traits higher priority than to_create from the definition - gives base traits normal priority - can apply to_create from the definition - can apply to_create from traits - gives additional traits higher priority than base traits and factory definition - -skipping the default create - doesn't execute anything when creating the instance - -initialize_with for a constructor that requires a block - executes the block correctly - -a stubbed instance - acts as if it came from the database - assigns associations and acts as if it is saved - -multiple creates and transient attributes to dynamically build attribute lists - allows the number of posts to be modified - generates the correct number of posts - -when a self-referential trait is defined - raises a TraitDefinitionError - raises a TraitDefinitionError - -a generated attributes hash - doesn't assign associations - assigns a default value - assigns an overridden value - assigns a lazy, dependent attribute - -reload - does not reset the value of use_parent_strategy - -assigning overrides that are also private methods on object - some_funky_method - is expected to eq "foobar!" - format - is expected to eq "Great" - more_format - is expected to eq "format: Great" - y - is expected to eq 12345 - -custom callbacks - runs a custom before callback when the proper strategy executes - runs a custom after callback when the proper strategy executes - runs a custom callback without prepending before or after when the proper strategy executes - -defining a child factory before a parent - creates admin factories correctly - -register custom strategies - allows overriding default strategies - allows using the *_pair method to build a list using a custom strategy - allows using the *_list method to build a list using a custom strategy - allows adding additional strategies - -build multiple instances - with a block - correctly uses the set value - with a block that receives both the object and an index - correctly uses the set value - with default attributes - overrides the default values - without default attributes - builds (but doesn't save) all the posts - uses the default factory values - length - is expected to eq 20 - -using ActiveSupport::Instrumentation to track compile_factory interaction - tracks proper time of compiling the factory - builds the correct payload - when factory with additional traits - builds the correct payload - when factory with base traits - builds the correct payload - -a built instance with strategy: :create - assigns and saves associations - is expected to be new record - -initialize_with with FG attributes that are transient - name - is expected to eq "Handsome Chap from .construct" - -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) - -sequences - generates several values in the correct format - generates sequential numbers if no block is given - generates aliases for the sequence that reference the same block and retains value - generates aliases for the sequence that reference the same block - generates few values of the sequence - -an instance generated by a factory named a camel case string - registers the UserModel factory - -global skip_create - does not persist child records - does not persist any record - honors inline trait to_create - honors overridden to_create - -aliases and overrides - one - is expected to eq "override" - two - is expected to be nil - -#add_attribute - assigns attributes for reserved words on .attributes_for - assigns attributes for reserved words on .build - -transient attributes - with a transient variable assigned - generates the correct attributes on a rockstar with a name - generates the correct attributes on a groupie - generates the correct attributes on a rockstar - generates the correct attributes on an upcased rockstar - without transient variables assigned - uses the default value of the attribute - returning attributes for a factory - is expected not to have key :four - is expected to have key :email - is expected not to have key :rockstar - is expected to have key :name - is expected not to have key :upcased nested factories with different parents honors :parent over the factory block nesting -global to_create - handles child to_create with trait - handles child to_create - handles base to_create - handles inline trait override - uses to_create globally across FactoryBot.define - -setting private attributes - raises a NoMethodError - -enum traits - 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 - when automatically_define_enum_traits is true - builds traits for each enumerated value using a custom enumerable - prefers user defined traits over automatically built traits - builds traits for each enumerated value using a provided list of values as a Hash - builds traits automatically for model enum field - builds traits for each enumerated value using a provided list of values as an Array - -using ActiveSupport::Instrumentation to track run_factory interaction - builds the correct payload - tracks proper time of creating the record - -attributes defined using Symbol#to_proc - assigns values correctly - assigns value with override correctly - assigns overridden value correctly - -a stubbed instance overriding strategy - assigns associations and acts as if it is saved - acts as if it is saved in the database - -syntax methods within dynamic attributes - can access syntax methods from dynamic attributes - can access methods already existing on the class - can access syntax methods from dynamic attributes - allows syntax methods to be used when the block has an arity of 1 +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 -traits with initialize_with - gives base traits normal priority - can apply initialize_with from the definition - gives additional traits higher priority than initialize_with from the definition - can apply initialize_with from traits - gives additional traits higher priority than base traits and factory definition - gives base traits lower priority than overrides +defaulting `created_at` + behaves the same as a non-stubbed created_at + allows assignment of created_at + allows overriding created_at for objects with created_at + is doesn't mark the object as changed + doesn't add created_at to objects who don't have the method + doesn't allow setting created_at on an object that doesn't define it + defaults created_at for objects with created_at -assigning values from a transient attribute - does not ignore an _id attribute that is an alias for a transient attribute +calling methods on the model instance + without the attribute being overridden + returns nil during attributes_for + doesn't instantiate a record with attributes_for + returns the correct value from the 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 -implicit traits containing callbacks - only runs the callback once +initialize_with with non-FG attributes + age + is expected to eq 21 + name + is expected to eq "John Doe" -associations without overriding :strategy - when the :use_parent_strategy config option is set to true - uses the parent strategy on the association - when the :use_parent_strategy config option is set to false - uses the overridden strategy on the association +associations + when accidentally using an implicit declaration as an override + raises an error + when building interrelated associations + assigns the instance passed as an association attribute + connects records with interdependent relationships + when building collection associations + builds the association according to the given strategy + when accidentally using an implicit declaration for the factory + raises an error -declaring attributes on a Factory that are private methods on Object - sleep - is expected to eq -5 - link - is expected to eq "http://example.com" - system - is expected to eq false +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" create multiple instances - with a block - uses the new values - with a block that receives both the object and an index - uses the new values - with default attributes - overrides the default values - without the count - raise ArgumentError with the proper error message without default attributes creates all the posts uses the default factory values length - is expected to eq 20 + is expected to eq 2 -initialize_with has access to all attributes for construction - assigns attributes correctly +assigning values from a transient attribute + does not ignore an _id attribute that is an alias for a transient attribute -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 +association assignment from nested attributes + assigns the correct amount of comments + assigns the correct amount of comments when overridden 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" -defaulting `updated_at` - defaults updated_at for objects with updated_at - allows overriding updated_at for objects with updated_at - doesn't add updated_at to objects who don't have the method - allows assignment of updated_at - doesn't allow setting updated_at on an object that doesn't define it - is doesn't mark the object as changed - behaves the same as a non-stubbed updated_at - -global initialize_with - handles child initialize_with with trait - handles inline trait override - uses initialize_with globally across FactoryBot.define - handles base initialize_with - handles child initialize_with - -transient sequences - increments sequences correctly - -calling `build_stubbed` with a block - passes the stub instance - returns the stub instance - -defaulting `created_at` - defaults created_at for objects with created_at - is doesn't mark the object as changed - allows overriding created_at for objects with created_at - behaves the same as a non-stubbed created_at - doesn't allow setting created_at on an object that doesn't define it - doesn't add created_at to objects who don't have the method - allows assignment of created_at - -callbacks using Symbol#to_proc - runs the callback correctly +making sure the factory is properly compiled the first time we want to instantiate it + can honor traits on the very first call -configuring the starting id - defines which id build_stubbed instances start with +skipping the default create + doesn't execute anything when creating the instance -a built instance - is expected to be new record - when the :use_parent_strategy config option is set to true - assigns but does not save associations - when the :use_parent_strategy config option is set to false - assigns and saves associations +binding a callback to multiple callbacks + binds the callback to creation + does not bind the callback to building + binds the callback to stubbing calling `build` with a block passes the built instance returns the built instance -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 primary key - behaves like a persisted record - builds a stubbed instance - -a custom create - uses the custom create block instead of save +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 -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" +global initialize_with + handles child initialize_with + handles base initialize_with + uses initialize_with globally across FactoryBot.define + handles inline trait override + handles child initialize_with with trait callbacks - runs both the after(:build) and after(:create) callbacks when creating - runs child callback after parent callback - runs both the after(:stub) callback on the factory and the inherited after(:stub) callback runs the after(:build) callback when building runs the after(:stub) callback when stubbing + runs child callback after parent callback + runs both the after(:build) and after(:create) callbacks when creating + runs both the after(:stub) callback on the factory and the inherited after(:stub) callback -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 +initialize_with with a hash argument + builds the object correctly + +looking up traits that don't exist + when passing an invalid override trait + raises a KeyError + 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 a trait includes an invalid default trait + raises a KeyError including the factory name + +initialize_with non-ORM-backed objects + allows for overrides + generates random data + +register custom strategies + allows using the *_pair method to build a list using a custom strategy + allows using the *_list method to build a list using a custom strategy + allows adding additional strategies + allows overriding default strategies + +global callbacks + triggers after build callbacks for all factories + +defining methods inside FactoryBot + raises with a meaningful message -Finished in 12.05 seconds (files took 1.93 seconds to load) +Finished in 7.35 seconds (files took 1.13 seconds to load) 370 examples, 0 failures -Randomized with seed 61958 +Randomized with seed 52421 mv ./.gem2deb.Gemfile.lock Gemfile.lock @@ -2362,12 +2398,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/2157/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/2157/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/16383 and its subdirectories -I: Current time: Sun Jan 5 03:19:34 -12 2025 -I: pbuilder-time-stamp: 1736090374 +I: removing directory /srv/workspace/pbuilder/2157 and its subdirectories +I: Current time: Mon Jan 6 05:21:24 +14 2025 +I: pbuilder-time-stamp: 1736090484