mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
Add functions for creating new cells with values
This commit is contained in:
parent
5b710241e1
commit
0c990ef8cf
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue