mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-01-28 02:27:57 +08:00
adds fetch_all_team_samples method/spec
This commit is contained in:
parent
c53df21946
commit
5922aa21a8
3 changed files with 60 additions and 19 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# Helper module for dealing with the migration from samples
|
||||||
|
# to custom repositories. We need to query with SQL because probably we will not
|
||||||
|
# have the "Sample" and other related models at the time this code will execute
|
||||||
|
|
||||||
module Tasks
|
module Tasks
|
||||||
module SamplesToRepositoryMigrationService
|
module SamplesToRepositoryMigrationService
|
||||||
def self.prepare_repository(team, copy_num = 0)
|
def self.prepare_repository(team, copy_num = 0)
|
||||||
|
@ -67,7 +71,8 @@ module Tasks
|
||||||
RepositoryListItem.create(
|
RepositoryListItem.create(
|
||||||
data: item.fetch('name') { "sample group item (#{index})" },
|
data: item.fetch('name') { "sample group item (#{index})" },
|
||||||
created_by_id: item.fetch('created_by_id') { team.created_by_id },
|
created_by_id: item.fetch('created_by_id') { team.created_by_id },
|
||||||
last_modified_by_id: item.fetch('last_modified_by_id') { team.created_by_id },
|
last_modified_by_id:
|
||||||
|
item.fetch('last_modified_by_id') { team.created_by_id },
|
||||||
repository_column: repository_columns.first,
|
repository_column: repository_columns.first,
|
||||||
repository: repository
|
repository: repository
|
||||||
)
|
)
|
||||||
|
@ -77,7 +82,8 @@ module Tasks
|
||||||
RepositoryListItem.create(
|
RepositoryListItem.create(
|
||||||
data: item.fetch('name') { "sample group item (#{index})" },
|
data: item.fetch('name') { "sample group item (#{index})" },
|
||||||
created_by_id: item.fetch('created_by_id') { team.created_by_id },
|
created_by_id: item.fetch('created_by_id') { team.created_by_id },
|
||||||
last_modified_by_id: item.fetch('last_modified_by_id') { team.created_by_id },
|
last_modified_by_id:
|
||||||
|
item.fetch('last_modified_by_id') { team.created_by_id },
|
||||||
repository_column: repository_columns.last,
|
repository_column: repository_columns.last,
|
||||||
repository: repository
|
repository: repository
|
||||||
)
|
)
|
||||||
|
@ -108,5 +114,23 @@ module Tasks
|
||||||
SQL
|
SQL
|
||||||
ActiveRecord::Base.connection.execute(assigned_samples_sql).to_a
|
ActiveRecord::Base.connection.execute(assigned_samples_sql).to_a
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.fetch_all_team_samples(team)
|
||||||
|
samples_sql = <<-SQL
|
||||||
|
SELECT samples.id AS sample_id,
|
||||||
|
samples.name AS sample_name,
|
||||||
|
samples.user_id AS sample_created_by_id,
|
||||||
|
samples.last_modified_by_id AS sample_last_modified_by_id,
|
||||||
|
sample_types.name AS sample_type_name,
|
||||||
|
sample_groups.name AS sample_group_name,
|
||||||
|
sample_groups.color AS sample_group_color
|
||||||
|
FROM samples
|
||||||
|
JOIN sample_types ON samples.sample_type_id = sample_types.id
|
||||||
|
JOIN sample_groups ON samples.sample_type_id = sample_groups.id
|
||||||
|
WHERE samples.team_id = #{team.id}
|
||||||
|
SQL
|
||||||
|
|
||||||
|
ActiveRecord::Base.connection.execute(samples_sql).to_a
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ namespace :samples_to_repository_migration do
|
||||||
desc 'Migrates all data from samples to custom repository'
|
desc 'Migrates all data from samples to custom repository'
|
||||||
task :run, [:last_id] => :environment do |_, args|
|
task :run, [:last_id] => :environment do |_, args|
|
||||||
params = { batch_size: 10 }
|
params = { batch_size: 10 }
|
||||||
migration_service = SamplesToRepositoryMigrationService
|
migration_service = Tasks::SamplesToRepositoryMigrationService
|
||||||
if args.present? && args[:last_id].present?
|
if args.present? && args[:last_id].present?
|
||||||
params[:start] = args[:last_id].to_i
|
params[:start] = args[:last_id].to_i
|
||||||
end
|
end
|
||||||
|
@ -12,20 +12,8 @@ namespace :samples_to_repository_migration do
|
||||||
puts "******************************* \n\n\n\n"
|
puts "******************************* \n\n\n\n"
|
||||||
puts "Processing Team id => [#{team.id}] \n\n\n\n"
|
puts "Processing Team id => [#{team.id}] \n\n\n\n"
|
||||||
puts '*******************************'
|
puts '*******************************'
|
||||||
|
# byebug
|
||||||
samples_sql = <<-SQL
|
migration_service.fetch_all_team_samples(team)
|
||||||
SELECT samples.id AS sample_id,
|
|
||||||
samples.name AS sample_name,
|
|
||||||
samples.user_id AS sample_created_by_id,
|
|
||||||
samples.last_modified_by_id AS sample_last_modified_by_id,
|
|
||||||
sample_types.name AS sample_type_name,
|
|
||||||
sample_groups.name AS sample_group_name,
|
|
||||||
sample_groups.color AS sample_group_color
|
|
||||||
FROM samples
|
|
||||||
JOIN sample_types ON samples.sample_type_id = sample_types.id
|
|
||||||
JOIN sample_groups ON samples.sample_type_id = sample_groups.id
|
|
||||||
WHERE samples.team_id = #{team.id}
|
|
||||||
SQL
|
|
||||||
|
|
||||||
repository = migration_service.prepare_repository(team)
|
repository = migration_service.prepare_repository(team)
|
||||||
custom_columns = migration_service.prepare_text_value_custom_columns(team, repository) +
|
custom_columns = migration_service.prepare_text_value_custom_columns(team, repository) +
|
||||||
|
@ -33,7 +21,7 @@ namespace :samples_to_repository_migration do
|
||||||
team,
|
team,
|
||||||
repository
|
repository
|
||||||
)
|
)
|
||||||
byebug
|
# byebug
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,6 @@ describe Tasks::SamplesToRepositoryMigrationService do
|
||||||
let(:user) { create :user, email: 'happy.user@scinote.net' }
|
let(:user) { create :user, email: 'happy.user@scinote.net' }
|
||||||
let(:team) { create :team, created_by: user }
|
let(:team) { create :team, created_by: user }
|
||||||
let(:user_team) { create :user_team, user: user, team: team }
|
let(:user_team) { create :user_team, user: user, team: team }
|
||||||
let(:sample) { create :sample, name: 'My sample', user: user, team: team }
|
|
||||||
|
|
||||||
describe '#prepare_repository/2' do
|
describe '#prepare_repository/2' do
|
||||||
context 'creates and return a new custom repository named' do
|
context 'creates and return a new custom repository named' do
|
||||||
|
@ -141,6 +140,7 @@ describe Tasks::SamplesToRepositoryMigrationService do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get_sample_custom_fields/1' do
|
describe '#get_sample_custom_fields/1' do
|
||||||
|
let(:sample) { create :sample, name: 'My sample', user: user, team: team }
|
||||||
let(:custom_field) do
|
let(:custom_field) do
|
||||||
create :custom_field, name: 'My Custom column',
|
create :custom_field, name: 'My Custom column',
|
||||||
user: user,
|
user: user,
|
||||||
|
@ -178,6 +178,7 @@ describe Tasks::SamplesToRepositoryMigrationService do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get_assigned_sample_module/1' do
|
describe '#get_assigned_sample_module/1' do
|
||||||
|
let(:sample) { create :sample, name: 'My sample', user: user, team: team }
|
||||||
let(:my_module) { create :my_module }
|
let(:my_module) { create :my_module }
|
||||||
let(:subject) do
|
let(:subject) do
|
||||||
Tasks::SamplesToRepositoryMigrationService
|
Tasks::SamplesToRepositoryMigrationService
|
||||||
|
@ -238,4 +239,32 @@ describe Tasks::SamplesToRepositoryMigrationService do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'fetch_all_team_samples/1' do
|
||||||
|
let(:subject) do
|
||||||
|
Tasks::SamplesToRepositoryMigrationService.fetch_all_team_samples(team)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'team has samples' do
|
||||||
|
before do
|
||||||
|
100.times do |index|
|
||||||
|
create :sample, name: "Sample (#{index})", user: user, team: team
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to be_an Array }
|
||||||
|
it { expect(subject.length).to eq 100 }
|
||||||
|
|
||||||
|
it 'returns an array of all team samples' do
|
||||||
|
subject.each_with_index do |element, index|
|
||||||
|
expect(element.fetch('sample_name')). to eq "Sample (#{index})"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'team does not have samples' do
|
||||||
|
it { is_expected.to be_an Array }
|
||||||
|
it { is_expected.to be_empty }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue