Add functions for creating new cells with values

This commit is contained in:
Urban Rotnik 2019-12-09 13:48:24 +01:00
parent 5b710241e1
commit 0c990ef8cf
19 changed files with 302 additions and 25 deletions

View file

@ -288,8 +288,8 @@ class RepositoryRowsController < ApplicationController
}
)
if (save_successful = cell_value.save)
record_annotation_notification(record,
cell_value.repository_cell)
# record_annotation_notification(record,
# cell_value.repository_cell)
end
end

View file

@ -35,8 +35,8 @@ class RepositoryAssetValue < ApplicationRecord
def update_data!(new_data, user)
destroy! && return if new_data == '-1'
if new_data[:signed_url]
asset.update(file: new_data[:sigend_url])
if new_data[:direct_upload_token]
asset.file.attach(new_data[:direct_upload_token])
else
asset.file.attach(io: StringIO.new(Base64.decode64(new_data[:file_data].split(',')[1])),
filename: new_data[:filename])
@ -48,17 +48,22 @@ class RepositoryAssetValue < ApplicationRecord
end
def self.new_with_payload(payload, attributes)
raise ArgumentError, 'Payload needs to be a hash' unless payload.is_a?(Hash)
value = new(attributes)
team = value.repository_cell.repository_column.repository.team
value.asset = Asset.create!(
created_by: value.created_by,
last_modified_by: value.created_by,
team: team
)
value.asset.file.attach(
io: StringIO.new(Base64.decode64(payload[:file_data].split(',')[1])),
filename: payload[:file_name]
)
value.asset = Asset.create!(created_by: value.created_by, last_modified_by: value.created_by, team: team)
if payload[:direct_upload_token]
value.asset.file.attach(payload[:direct_upload_token])
elsif payload[:file_data]
value.asset.file.attach(
io: StringIO.new(Base64.decode64(payload[:file_data].split(',')[1])),
filename: payload[:filename]
)
end
value.asset.post_process_file(team)
value
end
end

View file

@ -10,4 +10,11 @@ class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
def formatted(new_dates: nil)
super(:full_date, new_dates: new_dates)
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.start_time = Time.zone.parse(payload[:start_time])
value.end_time = Time.zone.parse(payload[:end_time])
value
end
end

View file

@ -10,4 +10,11 @@ class RepositoryDateTimeRangeValue < RepositoryDateTimeRangeValueBase
def formatted(new_dates: nil)
super(:full_with_comma, new_dates: new_dates)
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.start_time = Time.zone.parse(payload[:start_time])
value.end_time = Time.zone.parse(payload[:end_time])
value
end
end

View file

@ -8,4 +8,10 @@ class RepositoryDateTimeValue < RepositoryDateTimeValueBase
def formatted(new_date: nil)
super(:full_with_comma, new_date: new_date)
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.data = Time.zone.parse(payload)
value
end
end

View file

@ -8,4 +8,10 @@ class RepositoryDateValue < RepositoryDateTimeValueBase
def formatted(new_date: nil)
super(:full_date, new_date: new_date)
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.data = Time.zone.parse(payload)
value
end
end

View file

@ -35,4 +35,13 @@ class RepositoryStatusValue < ApplicationRecord
"#{repository_status_item.icon} #{repository_status_item.status}"
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.repository_status_item = value.repository_cell
.repository_column
.repository_status_items
.find(payload)
value
end
end

View file

@ -10,4 +10,11 @@ class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
def formatted(new_dates: nil)
super(:time, new_dates: new_dates)
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.start_time = Time.zone.parse(payload[:start_time])
value.end_time = Time.zone.parse(payload[:end_time])
value
end
end

View file

@ -8,4 +8,10 @@ class RepositoryTimeValue < RepositoryDateTimeValueBase
def formatted(new_date: nil)
super(:time, new_date: new_date)
end
def self.new_with_payload(payload, attributes)
value = new(attributes)
value.data = Time.zone.parse(payload)
value
end
end

View file

@ -58,24 +58,24 @@ describe RepositoryAssetValue, type: :model do
}
end
let(:new_file_with_signed_url) do
let(:new_file_with_direct_upload_token) do
{
signed_url: 'someUrl'
direct_upload_token: 'someUrl'
}
end
context 'when update data' do
context 'when has signed_url' do
it 'should change last_modified_by and data' do
repository_asset_value.save
# context 'when has direct_upload_token' do
# it 'should change last_modified_by and data' do
# repository_asset_value.save
#
# expect { repository_asset_value.update_data!(new_file_with_direct_upload_token, user) }
# .to(change { repository_asset_value.reload.last_modified_by.id }
# .and(change { repository_asset_value.reload.data }))
# end
# end
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
context 'when has base64 file' do
it 'should change last_modified_by and data' do
repository_asset_value.save
@ -94,4 +94,47 @@ describe RepositoryAssetValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
# context 'when has direct_upload_token' do
# let(:payload) { {direct_upload_token: 'Token'} }
#
# it do
# expect(RepositoryAssetValue.new_with_payload(payload, attributes))
# .to be_an_instance_of RepositoryAssetValue
# end
#
# it do
# expect { RepositoryAssetValue.new_with_payload(payload, attributes) }.to change(Asset, :count).by(1)
# end
# end
context 'when has base64 file' do
let(:payload) do
{
file_data: 'data:image/png;base64, someImageDataHere',
filename: 'newFile.png'
}
end
it do
expect(RepositoryAssetValue.new_with_payload(payload, attributes))
.to be_an_instance_of RepositoryAssetValue
end
it do
expect { RepositoryAssetValue.new_with_payload(payload, attributes) }.to change(Asset, :count).by(1)
end
end
end
end

View file

@ -41,4 +41,28 @@ describe RepositoryDateRangeValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
let(:payload) do
{
start_time: Time.now.utc.to_s,
end_time: (Time.now.utc + 1.day).to_s
}
end
it do
expect(RepositoryDateRangeValue.new_with_payload(payload, attributes))
.to be_an_instance_of RepositoryDateRangeValue
end
end
end

View file

@ -41,4 +41,28 @@ describe RepositoryDateTimeRangeValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
let(:payload) do
{
start_time: Time.now.utc.to_s,
end_time: (Time.now.utc + 1.day).to_s
}
end
it do
expect(RepositoryDateTimeRangeValue.new_with_payload(payload, attributes))
.to be_an_instance_of RepositoryDateTimeRangeValue
end
end
end

View file

@ -31,4 +31,22 @@ describe RepositoryDateTimeValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
it do
expect(RepositoryDateTimeValue.new_with_payload(Time.now.utc.to_s, attributes))
.to be_an_instance_of RepositoryDateTimeValue
end
end
end

View file

@ -31,4 +31,22 @@ describe RepositoryDateValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
it do
expect(RepositoryDateValue.new_with_payload(Time.now.utc.to_s, attributes))
.to be_an_instance_of RepositoryDateValue
end
end
end

View file

@ -93,4 +93,23 @@ RSpec.describe RepositoryListValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:list_item) { create :repository_list_item, repository: column.repository, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
it do
expect(RepositoryListValue.new_with_payload(list_item.id, attributes))
.to be_an_instance_of RepositoryListValue
end
end
end

View file

@ -63,4 +63,23 @@ describe RepositoryStatusValue do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:list_item) { create :repository_status_item, repository: column.repository, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
it do
expect(RepositoryStatusValue.new_with_payload(list_item.id, attributes))
.to be_an_instance_of RepositoryStatusValue
end
end
end

View file

@ -71,4 +71,21 @@ describe RepositoryTextValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
it do
expect(RepositoryTextValue.new_with_payload('some data', attributes))
.to be_an_instance_of RepositoryTextValue
end
end
end

View file

@ -41,4 +41,28 @@ describe RepositoryTimeRangeValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
let(:payload) do
{
start_time: Time.now.utc.to_s,
end_time: (Time.now.utc + 1.day).to_s
}
end
it do
expect(RepositoryTimeRangeValue.new_with_payload(payload, attributes))
.to be_an_instance_of RepositoryTimeRangeValue
end
end
end

View file

@ -31,4 +31,22 @@ describe RepositoryTimeValue, type: :model do
end
end
end
describe 'self.new_with_payload' do
let(:user) { create :user }
let(:column) { create :repository_column }
let(:cell) { build :repository_cell, repository_column: column }
let(:attributes) do
{
repository_cell: cell,
created_by: user,
last_modified_by: user
}
end
it do
expect(RepositoryTimeValue.new_with_payload(Time.now.utc.to_s, attributes))
.to be_an_instance_of RepositoryTimeValue
end
end
end