Skip to content

Commit

Permalink
Add timestamptz to the dummy value case statement (#1544)
Browse files Browse the repository at this point in the history
Ran into an exception when upgrading to Rails 7.0.4.2 and a column of type `timestamptz`.

```
     Failure/Error:
       is_expected.to validate_uniqueness_of(:amount).
         scoped_to(:column1, :column2, :column3, :date_time_column).
         with_message('must be unique')
     
     NoMethodError:
       undefined method `getutc' for nil:NilClass
```

After tracing, 'dummy value' was observed as being sent into this function, when then resulted in `time` being nil:
https://github.com/rails/rails/blob/v7.0.4.2/activerecord/lib/active_record/connection_adapters/postgresql/oid/timestamp_with_time_zone.rb#L122
  • Loading branch information
callahat committed Mar 30, 2023
1 parent 7f836b7 commit e40c707
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/shoulda/matchers/util.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def self.dummy_value_for(column_type, array: false)
0
when :date
Date.new(2100, 1, 1)
when :datetime, :timestamp
when :datetime, :timestamp, :timestamptz
DateTime.new(2100, 1, 1)
when :time
Time.new(2000, 1, 1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -829,6 +829,16 @@
column_type: :datetime
end

context 'when one of the scoped attributes is a timestamp column (using DateTime)' do
include_context 'it supports scoped attributes of a certain type',
column_type: :timestamp
end

context 'when one of the scoped attributes is a timestamp with time zone column (using DateTime)' do
include_context 'it supports scoped attributes of a certain type',
column_type: :timestamptz
end

context 'when one of the scoped attributes is a time column (using Time)' do
include_context 'it supports scoped attributes of a certain type',
column_type: :time
Expand Down

0 comments on commit e40c707

Please sign in to comment.