Commit a210cb6b authored by Michael Kozono's avatar Michael Kozono

Rename table to untracked_files_for_uploads

parent 2ab3031b
...@@ -7,31 +7,31 @@ class TrackUntrackedUploads < ActiveRecord::Migration ...@@ -7,31 +7,31 @@ class TrackUntrackedUploads < ActiveRecord::Migration
disable_ddl_transaction! disable_ddl_transaction!
DOWNTIME = false DOWNTIME = false
MIGRATION = 'PrepareUnhashedUploads' MIGRATION = 'PrepareUntrackedUploads'
def up def up
unless table_exists?(:unhashed_upload_files) unless table_exists?(:untracked_files_for_uploads)
create_table :unhashed_upload_files do |t| create_table :untracked_files_for_uploads do |t|
t.string :path, null: false t.string :path, null: false
t.boolean :tracked, default: false, null: false t.boolean :tracked, default: false, null: false
t.timestamps_with_timezone null: false t.timestamps_with_timezone null: false
end end
end end
unless index_exists?(:unhashed_upload_files, :path) unless index_exists?(:untracked_files_for_uploads, :path)
add_index :unhashed_upload_files, :path, unique: true add_index :untracked_files_for_uploads, :path, unique: true
end end
unless index_exists?(:unhashed_upload_files, :tracked) unless index_exists?(:untracked_files_for_uploads, :tracked)
add_index :unhashed_upload_files, :tracked add_index :untracked_files_for_uploads, :tracked
end end
BackgroundMigrationWorker.perform_async(MIGRATION) BackgroundMigrationWorker.perform_async(MIGRATION)
end end
def down def down
if table_exists?(:unhashed_upload_files) if table_exists?(:untracked_files_for_uploads)
drop_table :unhashed_upload_files drop_table :untracked_files_for_uploads
end end
end end
end end
...@@ -1719,15 +1719,15 @@ ActiveRecord::Schema.define(version: 20171124150326) do ...@@ -1719,15 +1719,15 @@ ActiveRecord::Schema.define(version: 20171124150326) do
add_index "u2f_registrations", ["key_handle"], name: "index_u2f_registrations_on_key_handle", using: :btree add_index "u2f_registrations", ["key_handle"], name: "index_u2f_registrations_on_key_handle", using: :btree
add_index "u2f_registrations", ["user_id"], name: "index_u2f_registrations_on_user_id", using: :btree add_index "u2f_registrations", ["user_id"], name: "index_u2f_registrations_on_user_id", using: :btree
create_table "unhashed_upload_files", force: :cascade do |t| create_table "untracked_files_for_uploads", force: :cascade do |t|
t.string "path", null: false t.string "path", null: false
t.boolean "tracked", default: false, null: false t.boolean "tracked", default: false, null: false
t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "created_at", null: false
t.datetime_with_timezone "updated_at", null: false t.datetime_with_timezone "updated_at", null: false
end end
add_index "unhashed_upload_files", ["path"], name: "index_unhashed_upload_files_on_path", unique: true, using: :btree add_index "untracked_files_for_uploads", ["path"], name: "index_untracked_files_for_uploads_on_path", unique: true, using: :btree
add_index "unhashed_upload_files", ["tracked"], name: "index_unhashed_upload_files_on_tracked", using: :btree add_index "untracked_files_for_uploads", ["tracked"], name: "index_untracked_files_for_uploads_on_tracked", using: :btree
create_table "uploads", force: :cascade do |t| create_table "uploads", force: :cascade do |t|
t.integer "size", limit: 8, null: false t.integer "size", limit: 8, null: false
......
module Gitlab module Gitlab
module BackgroundMigration module BackgroundMigration
class PopulateUntrackedUploads class PopulateUntrackedUploads
class UnhashedUploadFile < ActiveRecord::Base class UntrackedFile < ActiveRecord::Base
self.table_name = 'unhashed_upload_files' self.table_name = 'untracked_files_for_uploads'
# Ends with /:random_hex/:filename # Ends with /:random_hex/:filename
FILE_UPLOADER_PATH_PATTERN = %r{/\h+/[^/]+\z} FILE_UPLOADER_PATH_PATTERN = %r{/\h+/[^/]+\z}
...@@ -84,7 +84,7 @@ module Gitlab ...@@ -84,7 +84,7 @@ module Gitlab
end end
def upload_path def upload_path
# UnhashedUploadFile#path is absolute, but Upload#path depends on uploader # UntrackedFile#path is absolute, but Upload#path depends on uploader
if uploader == 'FileUploader' if uploader == 'FileUploader'
# Path relative to project directory in uploads # Path relative to project directory in uploads
matchd = path_relative_to_upload_dir.match(FILE_UPLOADER_PATH_PATTERN) matchd = path_relative_to_upload_dir.match(FILE_UPLOADER_PATH_PATTERN)
...@@ -118,7 +118,7 @@ module Gitlab ...@@ -118,7 +118,7 @@ module Gitlab
# Not including a leading slash # Not including a leading slash
def path_relative_to_upload_dir def path_relative_to_upload_dir
base = %r{\A#{Regexp.escape(Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR)}/} base = %r{\A#{Regexp.escape(Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR)}/}
@path_relative_to_upload_dir ||= path.sub(base, '') @path_relative_to_upload_dir ||= path.sub(base, '')
end end
...@@ -218,10 +218,10 @@ module Gitlab ...@@ -218,10 +218,10 @@ module Gitlab
def perform(start_id, end_id) def perform(start_id, end_id)
return unless migrate? return unless migrate?
files = UnhashedUploadFile.untracked.where(id: start_id..end_id) files = UntrackedFile.untracked.where(id: start_id..end_id)
files.each do |unhashed_upload_file| files.each do |untracked_file|
begin begin
unhashed_upload_file.ensure_tracked! untracked_file.ensure_tracked!
rescue StandardError => e rescue StandardError => e
Rails.logger.warn "Failed to add untracked file to uploads: #{e.message}" Rails.logger.warn "Failed to add untracked file to uploads: #{e.message}"
...@@ -235,7 +235,7 @@ module Gitlab ...@@ -235,7 +235,7 @@ module Gitlab
private private
def migrate? def migrate?
UnhashedUploadFile.table_exists? && Upload.table_exists? UntrackedFile.table_exists? && Upload.table_exists?
end end
end end
end end
......
module Gitlab module Gitlab
module BackgroundMigration module BackgroundMigration
class PrepareUnhashedUploads class PrepareUntrackedUploads
# For bulk_queue_background_migration_jobs_by_range # For bulk_queue_background_migration_jobs_by_range
include Database::MigrationHelpers include Database::MigrationHelpers
...@@ -8,31 +8,31 @@ module Gitlab ...@@ -8,31 +8,31 @@ module Gitlab
UPLOAD_DIR = "#{CarrierWave.root}/uploads".freeze UPLOAD_DIR = "#{CarrierWave.root}/uploads".freeze
FOLLOW_UP_MIGRATION = 'PopulateUntrackedUploads'.freeze FOLLOW_UP_MIGRATION = 'PopulateUntrackedUploads'.freeze
class UnhashedUploadFile < ActiveRecord::Base class UntrackedFile < ActiveRecord::Base
include EachBatch include EachBatch
self.table_name = 'unhashed_upload_files' self.table_name = 'untracked_files_for_uploads'
end end
def perform def perform
return unless migrate? return unless migrate?
clear_unhashed_upload_file_paths clear_untracked_file_paths
store_unhashed_upload_file_paths store_untracked_file_paths
schedule_populate_untracked_uploads_jobs schedule_populate_untracked_uploads_jobs
end end
private private
def migrate? def migrate?
UnhashedUploadFile.table_exists? UntrackedFile.table_exists?
end end
def clear_unhashed_upload_file_paths def clear_untracked_file_paths
UnhashedUploadFile.delete_all UntrackedFile.delete_all
end end
def store_unhashed_upload_file_paths def store_untracked_file_paths
return unless Dir.exist?(UPLOAD_DIR) return unless Dir.exist?(UPLOAD_DIR)
each_file_batch(UPLOAD_DIR, FILE_PATH_BATCH_SIZE) do |file_paths| each_file_batch(UPLOAD_DIR, FILE_PATH_BATCH_SIZE) do |file_paths|
...@@ -89,7 +89,7 @@ module Gitlab ...@@ -89,7 +89,7 @@ module Gitlab
end end
def insert_file_path(file_path) def insert_file_path(file_path)
table_columns_and_values = 'unhashed_upload_files (path, created_at, updated_at) VALUES (?, ?, ?)' table_columns_and_values = 'untracked_files_for_uploads (path, created_at, updated_at) VALUES (?, ?, ?)'
sql = if Gitlab::Database.postgresql? sql = if Gitlab::Database.postgresql?
"INSERT INTO #{table_columns_and_values} ON CONFLICT DO NOTHING;" "INSERT INTO #{table_columns_and_values} ON CONFLICT DO NOTHING;"
...@@ -103,7 +103,7 @@ module Gitlab ...@@ -103,7 +103,7 @@ module Gitlab
end end
def schedule_populate_untracked_uploads_jobs def schedule_populate_untracked_uploads_jobs
bulk_queue_background_migration_jobs_by_range(UnhashedUploadFile, FOLLOW_UP_MIGRATION) bulk_queue_background_migration_jobs_by_range(UntrackedFile, FOLLOW_UP_MIGRATION)
end end
end end
end end
......
require 'spec_helper' require 'spec_helper'
describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sidekiq, schema: 20171103140253 do describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sidekiq, schema: 20171103140253 do
let!(:unhashed_upload_files) { table(:unhashed_upload_files) } let!(:untracked_files_for_uploads) { table(:untracked_files_for_uploads) }
let!(:uploads) { table(:uploads) } let!(:uploads) { table(:uploads) }
let(:user1) { create(:user) } let(:user1) { create(:user) }
...@@ -10,7 +10,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -10,7 +10,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
let(:project2) { create(:project) } let(:project2) { create(:project) }
let(:appearance) { create(:appearance) } let(:appearance) { create(:appearance) }
context 'with untracked files and tracked files in unhashed_upload_files' do context 'with untracked files and tracked files in untracked_files_for_uploads' do
before do before do
fixture = Rails.root.join('spec', 'fixtures', 'rails_sample.jpg') fixture = Rails.root.join('spec', 'fixtures', 'rails_sample.jpg')
...@@ -28,15 +28,15 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -28,15 +28,15 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
UploadService.new(project2, uploaded_file, FileUploader).execute # Markdown upload UploadService.new(project2, uploaded_file, FileUploader).execute # Markdown upload
appearance.update!(header_logo: uploaded_file) appearance.update!(header_logo: uploaded_file)
# Unhashed upload files created by PrepareUnhashedUploads # File records created by PrepareUntrackedUploads
unhashed_upload_files.create!(path: appearance.logo.file.file) untracked_files_for_uploads.create!(path: appearance.logo.file.file)
unhashed_upload_files.create!(path: appearance.header_logo.file.file) untracked_files_for_uploads.create!(path: appearance.header_logo.file.file)
unhashed_upload_files.create!(path: user1.avatar.file.file) untracked_files_for_uploads.create!(path: user1.avatar.file.file)
unhashed_upload_files.create!(path: user2.avatar.file.file) untracked_files_for_uploads.create!(path: user2.avatar.file.file)
unhashed_upload_files.create!(path: project1.avatar.file.file) untracked_files_for_uploads.create!(path: project1.avatar.file.file)
unhashed_upload_files.create!(path: project2.avatar.file.file) untracked_files_for_uploads.create!(path: project2.avatar.file.file)
unhashed_upload_files.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project1.full_path}/#{project1.uploads.last.path}") untracked_files_for_uploads.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project1.full_path}/#{project1.uploads.last.path}")
unhashed_upload_files.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project2.full_path}/#{project2.uploads.last.path}") untracked_files_for_uploads.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project2.full_path}/#{project2.uploads.last.path}")
user2.uploads.delete_all user2.uploads.delete_all
project2.uploads.delete_all project2.uploads.delete_all
...@@ -56,7 +56,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -56,7 +56,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
it 'sets all added or confirmed tracked files to tracked' do it 'sets all added or confirmed tracked files to tracked' do
expect do expect do
described_class.new.perform(1, 1000) described_class.new.perform(1, 1000)
end.to change { unhashed_upload_files.where(tracked: true).count }.from(0).to(8) end.to change { untracked_files_for_uploads.where(tracked: true).count }.from(0).to(8)
end end
it 'does not create duplicate uploads of already tracked files' do it 'does not create duplicate uploads of already tracked files' do
...@@ -68,8 +68,8 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -68,8 +68,8 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
end end
it 'uses the start and end batch ids [only 1st half]' do it 'uses the start and end batch ids [only 1st half]' do
start_id = unhashed_upload_files.all.to_a[0].id start_id = untracked_files_for_uploads.all.to_a[0].id
end_id = unhashed_upload_files.all.to_a[3].id end_id = untracked_files_for_uploads.all.to_a[3].id
expect do expect do
described_class.new.perform(start_id, end_id) described_class.new.perform(start_id, end_id)
...@@ -82,12 +82,12 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -82,12 +82,12 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
expect(project2.uploads.count).to eq(0) expect(project2.uploads.count).to eq(0)
# Only 4 have been either confirmed or added to uploads # Only 4 have been either confirmed or added to uploads
expect(unhashed_upload_files.where(tracked: true).count).to eq(4) expect(untracked_files_for_uploads.where(tracked: true).count).to eq(4)
end end
it 'uses the start and end batch ids [only 2nd half]' do it 'uses the start and end batch ids [only 2nd half]' do
start_id = unhashed_upload_files.all.to_a[4].id start_id = untracked_files_for_uploads.all.to_a[4].id
end_id = unhashed_upload_files.all.to_a[7].id end_id = untracked_files_for_uploads.all.to_a[7].id
expect do expect do
described_class.new.perform(start_id, end_id) described_class.new.perform(start_id, end_id)
...@@ -100,7 +100,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -100,7 +100,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
expect(project2.uploads.count).to eq(2) expect(project2.uploads.count).to eq(2)
# Only 4 have been either confirmed or added to uploads # Only 4 have been either confirmed or added to uploads
expect(unhashed_upload_files.where(tracked: true).count).to eq(4) expect(untracked_files_for_uploads.where(tracked: true).count).to eq(4)
end end
end end
...@@ -113,7 +113,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid ...@@ -113,7 +113,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads, :migration, :sid
end end
end end
describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFile do describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UntrackedFile do
include TrackUntrackedUploadsHelpers include TrackUntrackedUploadsHelpers
let(:upload_class) { Gitlab::BackgroundMigration::PopulateUntrackedUploads::Upload } let(:upload_class) { Gitlab::BackgroundMigration::PopulateUntrackedUploads::Upload }
...@@ -122,7 +122,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -122,7 +122,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
let(:user1) { create(:user) } let(:user1) { create(:user) }
context 'when the file is already in the uploads table' do context 'when the file is already in the uploads table' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/user/avatar/#{user1.id}/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/user/avatar/#{user1.id}/avatar.jpg") }
before do before do
upload_class.create!(path: "uploads/-/system/user/avatar/#{user1.id}/avatar.jpg", uploader: 'AvatarUploader', model_type: 'User', model_id: user1.id, size: 1234) upload_class.create!(path: "uploads/-/system/user/avatar/#{user1.id}/avatar.jpg", uploader: 'AvatarUploader', model_type: 'User', model_id: user1.id, size: 1234)
...@@ -130,7 +130,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -130,7 +130,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'does not add an upload' do it 'does not add an upload' do
expect do expect do
unhashed_upload_file.ensure_tracked! untracked_file.ensure_tracked!
end.not_to change { upload_class.count }.from(1) end.not_to change { upload_class.count }.from(1)
end end
end end
...@@ -142,7 +142,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -142,7 +142,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for an appearance logo file path' do context 'for an appearance logo file path' do
let(:model) { create(:appearance) } let(:model) { create(:appearance) }
let(:unhashed_upload_file) { described_class.create!(path: model.logo.file.file) } let(:untracked_file) { described_class.create!(path: model.logo.file.file) }
before do before do
model.update!(logo: uploaded_file) model.update!(logo: uploaded_file)
...@@ -151,7 +151,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -151,7 +151,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { model.reload.uploads.count }.from(0).to(1) end.to change { model.reload.uploads.count }.from(0).to(1)
expect(model.uploads.first.attributes).to include({ expect(model.uploads.first.attributes).to include({
...@@ -163,7 +163,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -163,7 +163,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for an appearance header_logo file path' do context 'for an appearance header_logo file path' do
let(:model) { create(:appearance) } let(:model) { create(:appearance) }
let(:unhashed_upload_file) { described_class.create!(path: model.header_logo.file.file) } let(:untracked_file) { described_class.create!(path: model.header_logo.file.file) }
before do before do
model.update!(header_logo: uploaded_file) model.update!(header_logo: uploaded_file)
...@@ -172,7 +172,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -172,7 +172,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { model.reload.uploads.count }.from(0).to(1) end.to change { model.reload.uploads.count }.from(0).to(1)
expect(model.uploads.first.attributes).to include({ expect(model.uploads.first.attributes).to include({
...@@ -184,7 +184,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -184,7 +184,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for a pre-Markdown Note attachment file path' do context 'for a pre-Markdown Note attachment file path' do
let(:model) { create(:note) } let(:model) { create(:note) }
let(:unhashed_upload_file) { described_class.create!(path: model.attachment.file.file) } let(:untracked_file) { described_class.create!(path: model.attachment.file.file) }
before do before do
model.update!(attachment: uploaded_file) model.update!(attachment: uploaded_file)
...@@ -193,7 +193,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -193,7 +193,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { upload_class.count }.from(0).to(1) end.to change { upload_class.count }.from(0).to(1)
expect(upload_class.first.attributes).to include({ expect(upload_class.first.attributes).to include({
...@@ -207,7 +207,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -207,7 +207,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for a user avatar file path' do context 'for a user avatar file path' do
let(:model) { create(:user) } let(:model) { create(:user) }
let(:unhashed_upload_file) { described_class.create!(path: model.avatar.file.file) } let(:untracked_file) { described_class.create!(path: model.avatar.file.file) }
before do before do
model.update!(avatar: uploaded_file) model.update!(avatar: uploaded_file)
...@@ -216,7 +216,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -216,7 +216,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { model.reload.uploads.count }.from(0).to(1) end.to change { model.reload.uploads.count }.from(0).to(1)
expect(model.uploads.first.attributes).to include({ expect(model.uploads.first.attributes).to include({
...@@ -228,7 +228,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -228,7 +228,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for a group avatar file path' do context 'for a group avatar file path' do
let(:model) { create(:group) } let(:model) { create(:group) }
let(:unhashed_upload_file) { described_class.create!(path: model.avatar.file.file) } let(:untracked_file) { described_class.create!(path: model.avatar.file.file) }
before do before do
model.update!(avatar: uploaded_file) model.update!(avatar: uploaded_file)
...@@ -237,7 +237,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -237,7 +237,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { model.reload.uploads.count }.from(0).to(1) end.to change { model.reload.uploads.count }.from(0).to(1)
expect(model.uploads.first.attributes).to include({ expect(model.uploads.first.attributes).to include({
...@@ -251,7 +251,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -251,7 +251,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for a project avatar file path' do context 'for a project avatar file path' do
let(:model) { create(:project) } let(:model) { create(:project) }
let(:unhashed_upload_file) { described_class.create!(path: model.avatar.file.file) } let(:untracked_file) { described_class.create!(path: model.avatar.file.file) }
before do before do
model.update!(avatar: uploaded_file) model.update!(avatar: uploaded_file)
...@@ -260,7 +260,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -260,7 +260,7 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { model.reload.uploads.count }.from(0).to(1) end.to change { model.reload.uploads.count }.from(0).to(1)
expect(model.uploads.first.attributes).to include({ expect(model.uploads.first.attributes).to include({
...@@ -272,20 +272,20 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -272,20 +272,20 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do
let(:model) { create(:project) } let(:model) { create(:project) }
let(:unhashed_upload_file) { described_class.new(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{model.full_path}/#{model.uploads.first.path}") } let(:untracked_file) { described_class.new(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{model.full_path}/#{model.uploads.first.path}") }
before do before do
UploadService.new(model, uploaded_file, FileUploader).execute # Markdown upload UploadService.new(model, uploaded_file, FileUploader).execute # Markdown upload
unhashed_upload_file.save! untracked_file.save!
model.reload.uploads.delete_all model.reload.uploads.delete_all
end end
it 'creates an Upload record' do it 'creates an Upload record' do
expect do expect do
unhashed_upload_file.add_to_uploads untracked_file.add_to_uploads
end.to change { model.reload.uploads.count }.from(0).to(1) end.to change { model.reload.uploads.count }.from(0).to(1)
hex_secret = unhashed_upload_file.path.match(/\/(\h+)\/rails_sample.jpg/)[1] hex_secret = untracked_file.path.match(/\/(\h+)\/rails_sample.jpg/)[1]
expect(model.uploads.first.attributes).to include({ expect(model.uploads.first.attributes).to include({
"path" => "#{hex_secret}/rails_sample.jpg", "path" => "#{hex_secret}/rails_sample.jpg",
"uploader" => "FileUploader" "uploader" => "FileUploader"
...@@ -295,250 +295,250 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -295,250 +295,250 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
end end
describe '#mark_as_tracked' do describe '#mark_as_tracked' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") }
it 'saves the record with tracked set to true' do it 'saves the record with tracked set to true' do
expect do expect do
unhashed_upload_file.mark_as_tracked untracked_file.mark_as_tracked
end.to change { unhashed_upload_file.tracked }.from(false).to(true) end.to change { untracked_file.tracked }.from(false).to(true)
expect(unhashed_upload_file.persisted?).to be_truthy expect(untracked_file.persisted?).to be_truthy
end end
end end
describe '#upload_path' do describe '#upload_path' do
context 'for an appearance logo file path' do context 'for an appearance logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") }
it 'returns the file path relative to the CarrierWave root' do it 'returns the file path relative to the CarrierWave root' do
expect(unhashed_upload_file.upload_path).to eq('uploads/-/system/appearance/logo/1/some_logo.jpg') expect(untracked_file.upload_path).to eq('uploads/-/system/appearance/logo/1/some_logo.jpg')
end end
end end
context 'for an appearance header_logo file path' do context 'for an appearance header_logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") }
it 'returns the file path relative to the CarrierWave root' do it 'returns the file path relative to the CarrierWave root' do
expect(unhashed_upload_file.upload_path).to eq('uploads/-/system/appearance/header_logo/1/some_logo.jpg') expect(untracked_file.upload_path).to eq('uploads/-/system/appearance/header_logo/1/some_logo.jpg')
end end
end end
context 'for a pre-Markdown Note attachment file path' do context 'for a pre-Markdown Note attachment file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") }
it 'returns the file path relative to the CarrierWave root' do it 'returns the file path relative to the CarrierWave root' do
expect(unhashed_upload_file.upload_path).to eq('uploads/-/system/note/attachment/1234/some_attachment.pdf') expect(untracked_file.upload_path).to eq('uploads/-/system/note/attachment/1234/some_attachment.pdf')
end end
end end
context 'for a user avatar file path' do context 'for a user avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") }
it 'returns the file path relative to the CarrierWave root' do it 'returns the file path relative to the CarrierWave root' do
expect(unhashed_upload_file.upload_path).to eq('uploads/-/system/user/avatar/1234/avatar.jpg') expect(untracked_file.upload_path).to eq('uploads/-/system/user/avatar/1234/avatar.jpg')
end end
end end
context 'for a group avatar file path' do context 'for a group avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") }
it 'returns the file path relative to the CarrierWave root' do it 'returns the file path relative to the CarrierWave root' do
expect(unhashed_upload_file.upload_path).to eq('uploads/-/system/group/avatar/1234/avatar.jpg') expect(untracked_file.upload_path).to eq('uploads/-/system/group/avatar/1234/avatar.jpg')
end end
end end
context 'for a project avatar file path' do context 'for a project avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") }
it 'returns the file path relative to the CarrierWave root' do it 'returns the file path relative to the CarrierWave root' do
expect(unhashed_upload_file.upload_path).to eq('uploads/-/system/project/avatar/1234/avatar.jpg') expect(untracked_file.upload_path).to eq('uploads/-/system/project/avatar/1234/avatar.jpg')
end end
end end
context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:random_hex) { SecureRandom.hex } let(:random_hex) { SecureRandom.hex }
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project.full_path}/#{random_hex}/Some file.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project.full_path}/#{random_hex}/Some file.jpg") }
it 'returns the file path relative to the project directory in uploads' do it 'returns the file path relative to the project directory in uploads' do
expect(unhashed_upload_file.upload_path).to eq("#{random_hex}/Some file.jpg") expect(untracked_file.upload_path).to eq("#{random_hex}/Some file.jpg")
end end
end end
end end
describe '#uploader' do describe '#uploader' do
context 'for an appearance logo file path' do context 'for an appearance logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") }
it 'returns AttachmentUploader as a string' do it 'returns AttachmentUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('AttachmentUploader') expect(untracked_file.uploader).to eq('AttachmentUploader')
end end
end end
context 'for an appearance header_logo file path' do context 'for an appearance header_logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") }
it 'returns AttachmentUploader as a string' do it 'returns AttachmentUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('AttachmentUploader') expect(untracked_file.uploader).to eq('AttachmentUploader')
end end
end end
context 'for a pre-Markdown Note attachment file path' do context 'for a pre-Markdown Note attachment file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") }
it 'returns AttachmentUploader as a string' do it 'returns AttachmentUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('AttachmentUploader') expect(untracked_file.uploader).to eq('AttachmentUploader')
end end
end end
context 'for a user avatar file path' do context 'for a user avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") }
it 'returns AvatarUploader as a string' do it 'returns AvatarUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('AvatarUploader') expect(untracked_file.uploader).to eq('AvatarUploader')
end end
end end
context 'for a group avatar file path' do context 'for a group avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") }
it 'returns AvatarUploader as a string' do it 'returns AvatarUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('AvatarUploader') expect(untracked_file.uploader).to eq('AvatarUploader')
end end
end end
context 'for a project avatar file path' do context 'for a project avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") }
it 'returns AvatarUploader as a string' do it 'returns AvatarUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('AvatarUploader') expect(untracked_file.uploader).to eq('AvatarUploader')
end end
end end
context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project.full_path}/#{SecureRandom.hex}/Some file.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project.full_path}/#{SecureRandom.hex}/Some file.jpg") }
it 'returns FileUploader as a string' do it 'returns FileUploader as a string' do
expect(unhashed_upload_file.uploader).to eq('FileUploader') expect(untracked_file.uploader).to eq('FileUploader')
end end
end end
end end
describe '#model_type' do describe '#model_type' do
context 'for an appearance logo file path' do context 'for an appearance logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") }
it 'returns Appearance as a string' do it 'returns Appearance as a string' do
expect(unhashed_upload_file.model_type).to eq('Appearance') expect(untracked_file.model_type).to eq('Appearance')
end end
end end
context 'for an appearance header_logo file path' do context 'for an appearance header_logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") }
it 'returns Appearance as a string' do it 'returns Appearance as a string' do
expect(unhashed_upload_file.model_type).to eq('Appearance') expect(untracked_file.model_type).to eq('Appearance')
end end
end end
context 'for a pre-Markdown Note attachment file path' do context 'for a pre-Markdown Note attachment file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") }
it 'returns Note as a string' do it 'returns Note as a string' do
expect(unhashed_upload_file.model_type).to eq('Note') expect(untracked_file.model_type).to eq('Note')
end end
end end
context 'for a user avatar file path' do context 'for a user avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") }
it 'returns User as a string' do it 'returns User as a string' do
expect(unhashed_upload_file.model_type).to eq('User') expect(untracked_file.model_type).to eq('User')
end end
end end
context 'for a group avatar file path' do context 'for a group avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") }
it 'returns Namespace as a string' do it 'returns Namespace as a string' do
expect(unhashed_upload_file.model_type).to eq('Namespace') expect(untracked_file.model_type).to eq('Namespace')
end end
end end
context 'for a project avatar file path' do context 'for a project avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") }
it 'returns Project as a string' do it 'returns Project as a string' do
expect(unhashed_upload_file.model_type).to eq('Project') expect(untracked_file.model_type).to eq('Project')
end end
end end
context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project.full_path}/#{SecureRandom.hex}/Some file.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project.full_path}/#{SecureRandom.hex}/Some file.jpg") }
it 'returns Project as a string' do it 'returns Project as a string' do
expect(unhashed_upload_file.model_type).to eq('Project') expect(untracked_file.model_type).to eq('Project')
end end
end end
end end
describe '#model_id' do describe '#model_id' do
context 'for an appearance logo file path' do context 'for an appearance logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/logo/1/some_logo.jpg") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq('1') expect(untracked_file.model_id).to eq('1')
end end
end end
context 'for an appearance header_logo file path' do context 'for an appearance header_logo file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/appearance/header_logo/1/some_logo.jpg") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq('1') expect(untracked_file.model_id).to eq('1')
end end
end end
context 'for a pre-Markdown Note attachment file path' do context 'for a pre-Markdown Note attachment file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/note/attachment/1234/some_attachment.pdf") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq('1234') expect(untracked_file.model_id).to eq('1234')
end end
end end
context 'for a user avatar file path' do context 'for a user avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/user/avatar/1234/avatar.jpg") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq('1234') expect(untracked_file.model_id).to eq('1234')
end end
end end
context 'for a group avatar file path' do context 'for a group avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/group/avatar/1234/avatar.jpg") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq('1234') expect(untracked_file.model_id).to eq('1234')
end end
end end
context 'for a project avatar file path' do context 'for a project avatar file path' do
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/-/system/project/avatar/1234/avatar.jpg") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq('1234') expect(untracked_file.model_id).to eq('1234')
end end
end end
context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project.full_path}/#{SecureRandom.hex}/Some file.jpg") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project.full_path}/#{SecureRandom.hex}/Some file.jpg") }
it 'returns the ID as a string' do it 'returns the ID as a string' do
expect(unhashed_upload_file.model_id).to eq(project.id.to_s) expect(untracked_file.model_id).to eq(project.id.to_s)
end end
end end
end end
...@@ -549,52 +549,52 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi ...@@ -549,52 +549,52 @@ describe Gitlab::BackgroundMigration::PopulateUntrackedUploads::UnhashedUploadFi
context 'for an appearance logo file path' do context 'for an appearance logo file path' do
let(:appearance) { create(:appearance) } let(:appearance) { create(:appearance) }
let(:unhashed_upload_file) { described_class.create!(path: appearance.logo.file.file) } let(:untracked_file) { described_class.create!(path: appearance.logo.file.file) }
before do before do
appearance.update!(logo: uploaded_file) appearance.update!(logo: uploaded_file)
end end
it 'returns the file size' do it 'returns the file size' do
expect(unhashed_upload_file.file_size).to eq(35255) expect(untracked_file.file_size).to eq(35255)
end end
it 'returns the same thing that CarrierWave would return' do it 'returns the same thing that CarrierWave would return' do
expect(unhashed_upload_file.file_size).to eq(appearance.logo.size) expect(untracked_file.file_size).to eq(appearance.logo.size)
end end
end end
context 'for a project avatar file path' do context 'for a project avatar file path' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:unhashed_upload_file) { described_class.create!(path: project.avatar.file.file) } let(:untracked_file) { described_class.create!(path: project.avatar.file.file) }
before do before do
project.update!(avatar: uploaded_file) project.update!(avatar: uploaded_file)
end end
it 'returns the file size' do it 'returns the file size' do
expect(unhashed_upload_file.file_size).to eq(35255) expect(untracked_file.file_size).to eq(35255)
end end
it 'returns the same thing that CarrierWave would return' do it 'returns the same thing that CarrierWave would return' do
expect(unhashed_upload_file.file_size).to eq(project.avatar.size) expect(untracked_file.file_size).to eq(project.avatar.size)
end end
end end
context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do context 'for a project Markdown attachment (notes, issues, MR descriptions) file path' do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:unhashed_upload_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUnhashedUploads::UPLOAD_DIR}/#{project.full_path}/#{project.uploads.first.path}") } let(:untracked_file) { described_class.create!(path: "#{Gitlab::BackgroundMigration::PrepareUntrackedUploads::UPLOAD_DIR}/#{project.full_path}/#{project.uploads.first.path}") }
before do before do
UploadService.new(project, uploaded_file, FileUploader).execute UploadService.new(project, uploaded_file, FileUploader).execute
end end
it 'returns the file size' do it 'returns the file size' do
expect(unhashed_upload_file.file_size).to eq(35255) expect(untracked_file.file_size).to eq(35255)
end end
it 'returns the same thing that CarrierWave would return' do it 'returns the same thing that CarrierWave would return' do
expect(unhashed_upload_file.file_size).to eq(project.uploads.first.size) expect(untracked_file.file_size).to eq(project.uploads.first.size)
end end
end end
end end
......
require 'spec_helper' require 'spec_helper'
describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidekiq, schema: 20171103140253 do describe Gitlab::BackgroundMigration::PrepareUntrackedUploads, :migration, :sidekiq, schema: 20171103140253 do
let!(:unhashed_upload_files) { table(:unhashed_upload_files) } let!(:untracked_files_for_uploads) { table(:untracked_files_for_uploads) }
let(:user1) { create(:user) } let(:user1) { create(:user) }
let(:user2) { create(:user) } let(:user2) { create(:user) }
...@@ -39,20 +39,20 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek ...@@ -39,20 +39,20 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
UploadService.new(project2, uploaded_file, FileUploader).execute UploadService.new(project2, uploaded_file, FileUploader).execute
end end
it 'adds unhashed files to the unhashed_upload_files table' do it 'adds unhashed files to the untracked_files_for_uploads table' do
Sidekiq::Testing.fake! do Sidekiq::Testing.fake! do
expect do expect do
described_class.new.perform described_class.new.perform
end.to change { unhashed_upload_files.count }.from(0).to(5) end.to change { untracked_files_for_uploads.count }.from(0).to(5)
end end
end end
it 'does not add hashed files to the unhashed_upload_files table' do it 'does not add hashed files to the untracked_files_for_uploads table' do
Sidekiq::Testing.fake! do Sidekiq::Testing.fake! do
described_class.new.perform described_class.new.perform
hashed_file_path = project2.uploads.where(uploader: 'FileUploader').first.path hashed_file_path = project2.uploads.where(uploader: 'FileUploader').first.path
expect(unhashed_upload_files.where("path like '%#{hashed_file_path}%'").exists?).to be_falsey expect(untracked_files_for_uploads.where("path like '%#{hashed_file_path}%'").exists?).to be_falsey
end end
end end
...@@ -66,16 +66,16 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek ...@@ -66,16 +66,16 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
end end
# E.g. from a previous failed run of this background migration # E.g. from a previous failed run of this background migration
context 'when there is existing data in unhashed_upload_files' do context 'when there is existing data in untracked_files_for_uploads' do
before do before do
unhashed_upload_files.create(path: '/foo/bar.jpg') untracked_files_for_uploads.create(path: '/foo/bar.jpg')
end end
it 'clears existing data before adding new data' do it 'clears existing data before adding new data' do
Sidekiq::Testing.fake! do Sidekiq::Testing.fake! do
expect do expect do
described_class.new.perform described_class.new.perform
end.to change { unhashed_upload_files.count }.from(1).to(5) end.to change { untracked_files_for_uploads.count }.from(1).to(5)
end end
end end
end end
...@@ -91,7 +91,7 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek ...@@ -91,7 +91,7 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
Sidekiq::Testing.fake! do Sidekiq::Testing.fake! do
expect do expect do
described_class.new.perform described_class.new.perform
end.to change { unhashed_upload_files.count }.from(0).to(5) end.to change { untracked_files_for_uploads.count }.from(0).to(5)
end end
end end
end end
...@@ -100,11 +100,11 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek ...@@ -100,11 +100,11 @@ describe Gitlab::BackgroundMigration::PrepareUnhashedUploads, :migration, :sidek
# Very new or lightly-used installations that are running this migration # Very new or lightly-used installations that are running this migration
# may not have an upload directory because they have no uploads. # may not have an upload directory because they have no uploads.
context 'when no files were ever uploaded' do context 'when no files were ever uploaded' do
it 'does not add to the unhashed_upload_files table (and does not raise error)' do it 'does not add to the untracked_files_for_uploads table (and does not raise error)' do
Sidekiq::Testing.fake! do Sidekiq::Testing.fake! do
expect do expect do
described_class.new.perform described_class.new.perform
end.not_to change { unhashed_upload_files.count }.from(0) end.not_to change { untracked_files_for_uploads.count }.from(0)
end end
end end
end end
......
...@@ -4,8 +4,8 @@ require Rails.root.join('db', 'post_migrate', '20171103140253_track_untracked_up ...@@ -4,8 +4,8 @@ require Rails.root.join('db', 'post_migrate', '20171103140253_track_untracked_up
describe TrackUntrackedUploads, :migration, :sidekiq do describe TrackUntrackedUploads, :migration, :sidekiq do
include TrackUntrackedUploadsHelpers include TrackUntrackedUploadsHelpers
class UnhashedUploadFile < ActiveRecord::Base class UntrackedFile < ActiveRecord::Base
self.table_name = 'unhashed_upload_files' self.table_name = 'untracked_files_for_uploads'
end end
matcher :be_scheduled_migration do matcher :be_scheduled_migration do
...@@ -29,10 +29,10 @@ describe TrackUntrackedUploads, :migration, :sidekiq do ...@@ -29,10 +29,10 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
end end
end end
it 'ensures the unhashed_upload_files table exists' do it 'ensures the untracked_files_for_uploads table exists' do
expect do expect do
migrate! migrate!
end.to change { table_exists?(:unhashed_upload_files) }.from(false).to(true) end.to change { table_exists?(:untracked_files_for_uploads) }.from(false).to(true)
end end
it 'has a path field long enough for really long paths' do it 'has a path field long enough for really long paths' do
...@@ -48,7 +48,7 @@ describe TrackUntrackedUploads, :migration, :sidekiq do ...@@ -48,7 +48,7 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
component # filename component # filename
].flatten.join('/') ].flatten.join('/')
record = UnhashedUploadFile.create!(path: long_path) record = UntrackedFile.create!(path: long_path)
expect(record.reload.path.size).to eq(5711) expect(record.reload.path.size).to eq(5711)
end end
...@@ -132,12 +132,12 @@ describe TrackUntrackedUploads, :migration, :sidekiq do ...@@ -132,12 +132,12 @@ describe TrackUntrackedUploads, :migration, :sidekiq do
end end
end end
it 'all UnhashedUploadFile records are marked as tracked' do it 'all UntrackedFile records are marked as tracked' do
Sidekiq::Testing.inline! do Sidekiq::Testing.inline! do
migrate! migrate!
expect(UnhashedUploadFile.count).to eq(8) expect(UntrackedFile.count).to eq(8)
expect(UnhashedUploadFile.count).to eq(UnhashedUploadFile.where(tracked: true).count) expect(UntrackedFile.count).to eq(UntrackedFile.where(tracked: true).count)
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment