mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-07 21:55:20 +08:00
Add methods update_data, data_changed, formatted for all types off ColumnValues
This commit is contained in:
parent
55b9a82ff0
commit
79a50860b6
28 changed files with 620 additions and 53 deletions
|
@ -33,8 +33,13 @@ class RepositoryAssetValue < ApplicationRecord
|
|||
end
|
||||
|
||||
def update_data!(new_data, user)
|
||||
asset.file.attach(io: StringIO.new(Base64.decode64(new_data[:file_data].split(',')[1])),
|
||||
filename: new_data[:file_name])
|
||||
if new_data[:signed_url]
|
||||
asset.update(file: new_data[:sigend_url])
|
||||
else
|
||||
asset.file.attach(io: StringIO.new(Base64.decode64(new_data[:file_data].split(',')[1])),
|
||||
filename: new_data[:filename])
|
||||
end
|
||||
|
||||
asset.last_modified_by = user
|
||||
self.last_modified_by = user
|
||||
asset.save! && save!
|
||||
|
|
|
@ -20,7 +20,7 @@ class RepositoryCell < ApplicationRecord
|
|||
.where(repository_cells: { value_type: 'RepositoryNumberValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
belongs_to :repository_date_time_value,
|
||||
belongs_to :repository_date_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateValue' })
|
||||
|
@ -60,6 +60,13 @@ class RepositoryCell < ApplicationRecord
|
|||
end),
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_time_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryTimeValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_time_range_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
|
@ -67,6 +74,20 @@ class RepositoryCell < ApplicationRecord
|
|||
end),
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_range_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateRangeValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_time_range_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryTimeRangeValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
validates :repository_column,
|
||||
inclusion: { in: (lambda do |cell|
|
||||
cell.repository_row&.repository&.repository_columns || []
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
|
||||
def data_changed?(new_data)
|
||||
st = Time.zone.parse(new_data[:start_time])
|
||||
et = Time.zone.parse(new_data[:end_time])
|
||||
formatted != formatted(new_dates: [st, et])
|
||||
end
|
||||
|
||||
def formatted(new_dates: nil)
|
||||
super(:full_date, new_dates: new_dates)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryDateTimeRangeValue < RepositoryDateTimeRangeValueBase
|
||||
def data_changed?(new_data)
|
||||
st = Time.zone.parse(new_data[:start_time])
|
||||
et = Time.zone.parse(new_data[:end_time])
|
||||
formatted != formatted(new_dates: [st, et])
|
||||
end
|
||||
|
||||
def formatted(new_dates: nil)
|
||||
super(:full_with_comma, new_dates: new_dates)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,11 +15,31 @@ class RepositoryDateTimeRangeValueBase < ApplicationRecord
|
|||
SORTABLE_COLUMN_NAME = 'repository_date_time_values.start_time'
|
||||
SORTABLE_VALUE_INCLUDE = :repository_date_time_range_value
|
||||
|
||||
def formatted
|
||||
data
|
||||
def update_data!(new_data, user)
|
||||
self.start_time = Time.zone.parse(new_data[:start_time])
|
||||
self.end_time = Time.zone.parse(new_data[:end_time])
|
||||
self.last_modified_by = user
|
||||
save!
|
||||
end
|
||||
|
||||
def data
|
||||
[start_time, end_time].compact.join(' - ')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def formatted(format, new_dates: nil)
|
||||
if new_dates&.any?
|
||||
st = new_dates[0]
|
||||
et = new_dates[1]
|
||||
else
|
||||
st = start_time
|
||||
et = end_time
|
||||
end
|
||||
|
||||
[
|
||||
I18n.l(st, format: format),
|
||||
I18n.l(et, format: format)
|
||||
].compact.join(' - ')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryDateTimeValue < RepositoryDateTimeValueBase
|
||||
def data_changed?(new_data)
|
||||
formatted != formatted(new_date: new_data)
|
||||
end
|
||||
|
||||
def formatted(new_date: nil)
|
||||
super(:full_with_comma, new_date: new_date)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,23 +15,16 @@ class RepositoryDateTimeValueBase < ApplicationRecord
|
|||
SORTABLE_COLUMN_NAME = 'repository_date_time_values.data'
|
||||
SORTABLE_VALUE_INCLUDE = :repository_date_time_value
|
||||
|
||||
def formatted
|
||||
data
|
||||
end
|
||||
|
||||
def data_changed?(new_data)
|
||||
new_data != data
|
||||
end
|
||||
|
||||
def update_data!(new_data, user)
|
||||
self.data = new_data
|
||||
self.data = Time.zone.parse(new_data)
|
||||
self.last_modified_by = user
|
||||
save!
|
||||
end
|
||||
|
||||
def self.new_with_payload(payload, attributes)
|
||||
value = new(attributes)
|
||||
value.data = payload
|
||||
value
|
||||
private
|
||||
|
||||
def formatted(format, new_date: nil)
|
||||
d = new_date ? Time.zone.parse(new_date) : data
|
||||
I18n.l(d, format: format)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryDateValue < RepositoryDateTimeValueBase
|
||||
def data_changed?(new_data)
|
||||
formatted != formatted(new_date: new_data)
|
||||
end
|
||||
|
||||
def formatted(new_date: nil)
|
||||
super(:full_date, new_date: new_date)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,6 +18,16 @@ class RepositoryStatusValue < ApplicationRecord
|
|||
data
|
||||
end
|
||||
|
||||
def data_changed?(new_data)
|
||||
new_data.to_i != repository_status_item_id
|
||||
end
|
||||
|
||||
def update_data!(new_data, user)
|
||||
self.repository_status_item_id = new_data.to_i
|
||||
self.last_modified_by = user
|
||||
save!
|
||||
end
|
||||
|
||||
def data
|
||||
return nil unless repository_status_item
|
||||
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
|
||||
def data_changed?(new_data)
|
||||
st = Time.zone.parse(new_data[:start_time])
|
||||
et = Time.zone.parse(new_data[:end_time])
|
||||
formatted != formatted(new_dates: [st, et])
|
||||
end
|
||||
|
||||
def formatted(new_dates: nil)
|
||||
super(:time, new_dates: new_dates)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryTimeValue < RepositoryDateTimeValueBase
|
||||
def data_changed?(new_data)
|
||||
formatted != formatted(new_date: new_data)
|
||||
end
|
||||
|
||||
def formatted(new_date: nil)
|
||||
super(:time, new_date: new_date)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,14 +1,34 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
FactoryBot.define do
|
||||
factory :repository_date_time_range_value do
|
||||
factory :repository_date_time_range_value_base do
|
||||
created_by { create :user }
|
||||
last_modified_by { created_by }
|
||||
start_time { Time.zone.now }
|
||||
end_time { Faker::Time.between(from: start_time, to: Time.zone.now + 3.days) }
|
||||
end
|
||||
|
||||
factory :repository_date_time_range_value,
|
||||
parent: :repository_date_time_range_value_base,
|
||||
class: 'RepositoryDateTimeRangeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_time_range_value, repository_date_time_range_value: value)
|
||||
end
|
||||
end
|
||||
|
||||
factory :repository_time_range_value,
|
||||
parent: :repository_date_time_range_value_base,
|
||||
class: 'RepositoryTimeRangeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :time_range_value, repository_time_range_value: value)
|
||||
end
|
||||
end
|
||||
|
||||
factory :repository_date_range_value,
|
||||
parent: :repository_date_time_range_value_base,
|
||||
class: 'RepositoryDateRangeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_range_value, repository_date_range_value: value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
FactoryBot.define do
|
||||
factory :repository_asset_value do
|
||||
created_by { create :user }
|
||||
last_modified_by { created_by }
|
||||
asset
|
||||
after(:build) do |repository_asset_value|
|
||||
repository_asset_value.repository_cell ||= build(:repository_cell,
|
||||
|
|
|
@ -18,6 +18,20 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
|
||||
trait :time_value do
|
||||
repository_column { create :repository_column, :time_type, repository: repository_row.repository }
|
||||
after(:build) do |repository_cell|
|
||||
repository_cell.value ||= build(:repository_time_value, repository_cell: repository_cell)
|
||||
end
|
||||
end
|
||||
|
||||
trait :date_value do
|
||||
repository_column { create :repository_column, :date_type, repository: repository_row.repository }
|
||||
after(:build) do |repository_cell|
|
||||
repository_cell.value ||= build(:repository_date_value, repository_cell: repository_cell)
|
||||
end
|
||||
end
|
||||
|
||||
trait :list_value do
|
||||
repository_column { create :repository_column, :list_type, repository: repository_row.repository }
|
||||
after(:build) do |repository_cell|
|
||||
|
@ -46,6 +60,20 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
|
||||
trait :date_range_value do
|
||||
repository_column { create :repository_column, :date_range_type, repository: repository_row.repository }
|
||||
after(:build) do |repository_cell|
|
||||
repository_cell.value ||= build(:repository_date_range_value, repository_cell: repository_cell)
|
||||
end
|
||||
end
|
||||
|
||||
trait :time_range_value do
|
||||
repository_column { create :repository_column, :time_range_type, repository: repository_row.repository }
|
||||
after(:build) do |repository_cell|
|
||||
repository_cell.value ||= build(:repository_time_range_value, repository_cell: repository_cell)
|
||||
end
|
||||
end
|
||||
|
||||
trait :checkbox_value do
|
||||
repository_column { create :repository_column, :date_time_range_type, repository: repository_row.repository }
|
||||
after(:build) do |repository_cell|
|
||||
|
|
|
@ -12,4 +12,16 @@ FactoryBot.define do
|
|||
value.repository_cell ||= build(:repository_cell, :date_time_value, repository_date_time_value: value)
|
||||
end
|
||||
end
|
||||
|
||||
factory :repository_time_value, parent: :repository_date_time_value_base, class: 'RepositoryTimeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :time_value, repository_time_value: value)
|
||||
end
|
||||
end
|
||||
|
||||
factory :repository_date_value, parent: :repository_date_time_value_base, class: 'RepositoryDateValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_value, repository_date_value: value)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
FactoryBot.define do
|
||||
factory :repository_status_value do
|
||||
created_by { create :user }
|
||||
last_modified_by { created_by }
|
||||
|
||||
repository_status_item
|
||||
end
|
||||
end
|
||||
|
|
|
@ -42,4 +42,46 @@ describe RepositoryAssetValue, type: :model do
|
|||
expect(repository_asset_value.reload.formatted).to eq 'test.jpg'
|
||||
end
|
||||
end
|
||||
|
||||
describe 'data_changed?' do
|
||||
it do
|
||||
expect(repository_asset_value.data_changed?(anything)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
describe 'update_data!' do
|
||||
let(:user) { create :user }
|
||||
let(:new_file_base64) do
|
||||
{
|
||||
file_data: 'data:image/png;base64, someImageDataHere',
|
||||
filename: 'newFile.png'
|
||||
}
|
||||
end
|
||||
|
||||
let(:new_file_with_signed_url) do
|
||||
{
|
||||
signed_url: 'someUrl'
|
||||
}
|
||||
end
|
||||
|
||||
context 'when has signed_url' do
|
||||
it 'should change last_modified_by and data' do
|
||||
repository_asset_value.save
|
||||
|
||||
expect { repository_asset_value.update_data!(new_file_with_signed_url, user) }
|
||||
.to(change { repository_asset_value.reload.last_modified_by.id }
|
||||
.and(change { repository_asset_value.reload.data }))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has base464 file' do
|
||||
it 'should change last_modified_by and data' do
|
||||
repository_asset_value.save
|
||||
|
||||
expect { repository_asset_value.update_data!(new_file_base64, user) }
|
||||
.to(change { repository_asset_value.reload.last_modified_by.id }
|
||||
.and(change { repository_asset_value.reload.data }))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
44
spec/models/repository_date_range_value_spec.rb
Normal file
44
spec/models/repository_date_range_value_spec.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryDateRangeValue, type: :model do
|
||||
let(:date_range_value) do
|
||||
create :repository_date_range_value, start_time: Time.utc(2000, 10, 10), end_time: Time.utc(2000, 10, 11)
|
||||
end
|
||||
|
||||
describe '.formatted' do
|
||||
it 'prints date format with time' do
|
||||
str = '10/10/2000 - 10/11/2000'
|
||||
expect(date_range_value.formatted).to eq(str)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.data_changed?' do
|
||||
context 'when has different date value' do
|
||||
let(:new_values) do
|
||||
{
|
||||
start_time: Time.utc(2000, 10, 10).to_s,
|
||||
end_time: Time.utc(2000, 10, 12).to_s
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
expect(date_range_value.data_changed?(new_values)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same date value (but different time)' do
|
||||
let(:new_values) do
|
||||
{
|
||||
start_time: Time.utc(2000, 10, 10).to_s,
|
||||
end_time: Time.utc(2000, 10, 11, 4, 11).to_s
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
expect(date_range_value.data_changed?(new_values)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
55
spec/models/repository_date_time_range_value_base_spec.rb
Normal file
55
spec/models/repository_date_time_range_value_base_spec.rb
Normal file
|
@ -0,0 +1,55 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryDateTimeRangeValueBase, type: :model do
|
||||
let(:repository_date_time_range_value) { create :repository_date_time_range_value }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_date_time_range_value).to be_valid
|
||||
end
|
||||
|
||||
describe 'Validations' do
|
||||
describe '#repository_cell' do
|
||||
it { is_expected.to validate_presence_of(:repository_cell) }
|
||||
end
|
||||
|
||||
describe '#start_time' do
|
||||
it { is_expected.to validate_presence_of(:start_time) }
|
||||
end
|
||||
|
||||
describe '#end_time' do
|
||||
it { is_expected.to validate_presence_of(:end_time) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { is_expected.to belong_to(:created_by).optional }
|
||||
it { is_expected.to belong_to(:last_modified_by).optional }
|
||||
it { is_expected.to have_one(:repository_cell) }
|
||||
end
|
||||
|
||||
describe '.update_data!' do
|
||||
let(:user) { create :user }
|
||||
let(:new_times) do
|
||||
{
|
||||
start_time: Time.now.utc.to_s,
|
||||
end_time: (Time.zone.now + 2.days).utc.to_s
|
||||
}
|
||||
end
|
||||
it 'should change last_modified_by and dates' do
|
||||
repository_date_time_range_value.save
|
||||
|
||||
expect { repository_date_time_range_value.update_data!(new_times, user) }
|
||||
.to(change { repository_date_time_range_value.reload.last_modified_by.id }
|
||||
.and(change { repository_date_time_range_value.reload.data }))
|
||||
end
|
||||
end
|
||||
|
||||
describe '.data' do
|
||||
it 'returns start and end time' do
|
||||
str = repository_date_time_range_value.start_time.to_s + ' - ' + repository_date_time_range_value.end_time.to_s
|
||||
expect(repository_date_time_range_value.data).to eq(str)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -3,29 +3,42 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe RepositoryDateTimeRangeValue, type: :model do
|
||||
let(:repository_date_time_range_value) { create :repository_date_time_range_value }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_date_time_range_value).to be_valid
|
||||
let(:date_time_range_value) do
|
||||
create :repository_date_time_range_value, start_time: Time.utc(2000, 10, 10), end_time: Time.utc(2000, 10, 11)
|
||||
end
|
||||
|
||||
describe 'Validations' do
|
||||
describe '#repository_cell' do
|
||||
it { is_expected.to validate_presence_of(:repository_cell) }
|
||||
end
|
||||
|
||||
describe '#start_time' do
|
||||
it { is_expected.to validate_presence_of(:start_time) }
|
||||
end
|
||||
|
||||
describe '#end_time' do
|
||||
it { is_expected.to validate_presence_of(:end_time) }
|
||||
describe '.formatted' do
|
||||
it 'prints date format with time' do
|
||||
str = '10/10/2000, 00:00 - 10/11/2000, 00:00'
|
||||
expect(date_time_range_value.formatted).to eq(str)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { is_expected.to belong_to(:created_by).optional }
|
||||
it { is_expected.to belong_to(:last_modified_by).optional }
|
||||
it { is_expected.to have_one(:repository_cell) }
|
||||
describe '.data_changed?' do
|
||||
context 'when has different datetime value' do
|
||||
let(:new_values) do
|
||||
{
|
||||
start_time: Time.utc(2000, 10, 10).to_s,
|
||||
end_time: Time.utc(2000, 10, 12).to_s
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
expect(date_time_range_value.data_changed?(new_values)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same datetime value' do
|
||||
let(:new_values) do
|
||||
{
|
||||
start_time: Time.utc(2000, 10, 10).to_s,
|
||||
end_time: Time.utc(2000, 10, 11).to_s
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
expect(date_time_range_value.data_changed?(new_values)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
40
spec/models/repository_date_time_value_base_spec.rb
Normal file
40
spec/models/repository_date_time_value_base_spec.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryDateTimeValueBase, type: :model do
|
||||
let(:repository_date_time_value) { build :repository_date_time_value }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_date_time_value).to be_valid
|
||||
end
|
||||
|
||||
describe 'Validations' do
|
||||
describe '#repository_cell' do
|
||||
it { is_expected.to validate_presence_of(:repository_cell) }
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it { is_expected.to validate_presence_of(:data) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { is_expected.to belong_to(:created_by).optional }
|
||||
it { is_expected.to belong_to(:last_modified_by).optional }
|
||||
it { is_expected.to have_one(:repository_cell) }
|
||||
end
|
||||
|
||||
describe '.update_data!' do
|
||||
let(:user) { create :user }
|
||||
let(:new_data) { Time.now.utc.to_s }
|
||||
|
||||
it 'should change last_modified_by and dates' do
|
||||
repository_date_time_value.save
|
||||
|
||||
expect { repository_date_time_value.update_data!(new_data, user) }
|
||||
.to(change { repository_date_time_value.reload.last_modified_by.id }
|
||||
.and(change { repository_date_time_value.reload.data }))
|
||||
end
|
||||
end
|
||||
end
|
|
@ -3,25 +3,32 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe RepositoryDateTimeValue, type: :model do
|
||||
let(:repository_date_time_value) { build :repository_date_time_value }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_date_time_value).to be_valid
|
||||
let(:date_time_value) do
|
||||
create :repository_date_time_value, data: Time.utc(2000, 10, 11, 1, 4)
|
||||
end
|
||||
|
||||
describe 'Validations' do
|
||||
describe '#repository_cell' do
|
||||
it { is_expected.to validate_presence_of(:repository_cell) }
|
||||
end
|
||||
|
||||
describe '#data' do
|
||||
it { is_expected.to validate_presence_of(:data) }
|
||||
describe '.formatted' do
|
||||
it 'prints date format with date' do
|
||||
str = '10/11/2000, 01:04'
|
||||
expect(date_time_value.formatted).to eq(str)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { is_expected.to belong_to(:created_by).optional }
|
||||
it { is_expected.to belong_to(:last_modified_by).optional }
|
||||
it { is_expected.to have_one(:repository_cell) }
|
||||
describe '.data_changed?' do
|
||||
context 'when has different datetime value' do
|
||||
let(:new_values) { Time.utc(2000, 12, 11, 4, 14).to_s }
|
||||
|
||||
it do
|
||||
expect(date_time_value.data_changed?(new_values)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same datetime value' do
|
||||
let(:new_values) { Time.utc(2000, 10, 11, 1, 4).to_s }
|
||||
|
||||
it do
|
||||
expect(date_time_value.data_changed?(new_values)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
34
spec/models/repository_date_value_spec.rb
Normal file
34
spec/models/repository_date_value_spec.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryDateValue, type: :model do
|
||||
let(:date_value) do
|
||||
create :repository_date_value, data: Time.utc(2000, 10, 11)
|
||||
end
|
||||
|
||||
describe '.formatted' do
|
||||
it 'prints date format with date' do
|
||||
str = '10/11/2000'
|
||||
expect(date_value.formatted).to eq(str)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.data_changed?' do
|
||||
context 'when has different date value' do
|
||||
let(:new_values) { Time.utc(2000, 12, 11, 4, 14).to_s }
|
||||
|
||||
it do
|
||||
expect(date_value.data_changed?(new_values)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same date value (but different time)' do
|
||||
let(:new_values) { Time.utc(2000, 10, 11, 4, 11).to_s }
|
||||
|
||||
it do
|
||||
expect(date_value.data_changed?(new_values)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -52,4 +52,36 @@ RSpec.describe RepositoryListValue, type: :model do
|
|||
expect(repository_list_value.reload.data).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe 'data_changed?' do
|
||||
context 'when has new data' do
|
||||
it do
|
||||
expect(repository_list_value.data_changed?('-1')).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same data' do
|
||||
it do
|
||||
repository_list_value.save
|
||||
id = repository_list_value.repository_list_item.id
|
||||
|
||||
expect(repository_list_value.data_changed?(id)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'update_data!' do
|
||||
let(:user) { create :user }
|
||||
let(:new_list_item) do
|
||||
create :repository_list_item, repository_column: repository_list_value.repository_list_item.repository_column
|
||||
end
|
||||
|
||||
it 'should change last_modified_by and data' do
|
||||
repository_list_value.save
|
||||
|
||||
expect { repository_list_value.update_data!(new_list_item.id, user) }
|
||||
.to(change { repository_list_value.reload.last_modified_by.id }
|
||||
.and(change { repository_list_value.reload.data }))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,4 +20,37 @@ describe RepositoryStatusValue do
|
|||
it { is_expected.to belong_to(:created_by).optional }
|
||||
it { is_expected.to belong_to(:last_modified_by).optional }
|
||||
end
|
||||
|
||||
describe '.data_changed?' do
|
||||
context 'when has new data' do
|
||||
it do
|
||||
expect(repository_status_value.data_changed?('-1')).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same data' do
|
||||
it do
|
||||
repository_status_value.save
|
||||
id = repository_status_value.repository_status_item.id
|
||||
|
||||
expect(repository_status_value.data_changed?(id)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.update_data!' do
|
||||
let(:user) { create :user }
|
||||
let(:new_status_item) do
|
||||
create :repository_status_item,
|
||||
repository_column: repository_status_value.repository_status_item.repository_column
|
||||
end
|
||||
|
||||
it 'should change last_modified_by and data' do
|
||||
repository_status_value.save
|
||||
|
||||
expect { repository_status_value.update_data!(new_status_item.id, user) }
|
||||
.to(change { repository_status_value.reload.last_modified_by.id }
|
||||
.and(change { repository_status_value.reload.data }))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -34,4 +34,31 @@ describe RepositoryTextValue, type: :model do
|
|||
should validate_length_of(:data).is_at_most(Constants::TEXT_MAX_LENGTH)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'data_changed?' do
|
||||
context 'when has new data' do
|
||||
it do
|
||||
expect(repository_text_value.data_changed?('newData')).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same data' do
|
||||
it do
|
||||
data = repository_text_value.data
|
||||
expect(repository_text_value.data_changed?(data)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'update_data!' do
|
||||
let(:user) { create :user }
|
||||
|
||||
it 'should change last_modified_by and data' do
|
||||
repository_text_value.save
|
||||
|
||||
expect { repository_text_value.update_data!('newData', user) }
|
||||
.to(change { repository_text_value.reload.last_modified_by.id }
|
||||
.and(change { repository_text_value.reload.data }))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
44
spec/models/repository_time_range_value_spec.rb
Normal file
44
spec/models/repository_time_range_value_spec.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryTimeRangeValue, type: :model do
|
||||
let(:time_range_value) do
|
||||
create :repository_time_range_value, start_time: Time.utc(2000, 10, 10), end_time: Time.utc(2000, 10, 11, 4, 11)
|
||||
end
|
||||
|
||||
describe '.formatted' do
|
||||
it 'prints date format with time' do
|
||||
str = '00:00 - 04:11'
|
||||
expect(time_range_value.formatted).to eq(str)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.data_changed?' do
|
||||
context 'when has different time value' do
|
||||
let(:new_values) do
|
||||
{
|
||||
start_time: Time.utc(2000, 10, 10, 12, 13).to_s,
|
||||
end_time: Time.utc(2000, 10, 12, 4, 11).to_s
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
expect(time_range_value.data_changed?(new_values)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same time value (but different date)' do
|
||||
let(:new_values) do
|
||||
{
|
||||
start_time: Time.utc(2000, 10, 10).to_s,
|
||||
end_time: Time.utc(2012, 10, 14, 4, 11).to_s
|
||||
}
|
||||
end
|
||||
|
||||
it do
|
||||
expect(time_range_value.data_changed?(new_values)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
34
spec/models/repository_time_value_spec.rb
Normal file
34
spec/models/repository_time_value_spec.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryTimeValue, type: :model do
|
||||
let(:time_value) do
|
||||
create :repository_time_value, data: Time.utc(2000, 10, 11, 4, 11)
|
||||
end
|
||||
|
||||
describe '.formatted' do
|
||||
it 'prints date format with time' do
|
||||
str = '04:11'
|
||||
expect(time_value.formatted).to eq(str)
|
||||
end
|
||||
end
|
||||
|
||||
describe '.data_changed?' do
|
||||
context 'when has different time value' do
|
||||
let(:new_values) { Time.utc(2000, 10, 11, 4, 14).to_s }
|
||||
|
||||
it do
|
||||
expect(time_value.data_changed?(new_values)).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when has same time value (but different date)' do
|
||||
let(:new_values) { Time.utc(1999, 10, 14, 4, 11).to_s }
|
||||
|
||||
it do
|
||||
expect(time_value.data_changed?(new_values)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue