c112576b11
#200 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #331
101 lines
2.5 KiB
Ruby
101 lines
2.5 KiB
Ruby
require 'rails_helper'
|
|
require 'rake'
|
|
require 'open3'
|
|
|
|
RSpec.describe 'nico:export' do
|
|
let(:task) { Rake::Task['nico:export'] }
|
|
let(:success_status) { instance_double(Process::Status, success?: true) }
|
|
let(:failure_status) { instance_double(Process::Status, success?: false) }
|
|
|
|
def create_post(url)
|
|
Post.create!(url:)
|
|
end
|
|
|
|
before(:all) do
|
|
Rails.application.load_tasks unless Rake::Task.task_defined?('nico:export')
|
|
end
|
|
|
|
before do
|
|
task.reenable
|
|
|
|
allow(ENV).to receive(:fetch).with('MYSQL_USER').and_return('mysql-user')
|
|
allow(ENV).to receive(:fetch).with('MYSQL_PASS').and_return('mysql-pass')
|
|
allow(ENV).to receive(:fetch).with('NIZIKA_NICO_PATH').and_return('/srv/nizika-nico')
|
|
end
|
|
|
|
describe 'export' do
|
|
it 'exports nicovideo ids to shared nico DB' do
|
|
create_post('https://www.nicovideo.jp/watch/sm12345?ref=foo')
|
|
create_post('https://www.nicovideo.jp/watch/so67890#comments')
|
|
create_post('https://www.nicovideo.jp/watch/nm24680')
|
|
create_post('https://example.com/watch/sm99999')
|
|
|
|
expect(Open3).to receive(:capture3) do |env, *args, **kwargs|
|
|
expect(env).to eq(
|
|
{
|
|
'MYSQL_USER' => 'mysql-user',
|
|
'MYSQL_PASS' => 'mysql-pass',
|
|
},
|
|
)
|
|
|
|
expect(args.take(3)).to eq(
|
|
[
|
|
'python3',
|
|
'-m',
|
|
'tracked_videos.put_bulk_upsert',
|
|
],
|
|
)
|
|
|
|
expect(args.drop(3)).to contain_exactly(
|
|
'sm12345',
|
|
'so67890',
|
|
'nm24680',
|
|
)
|
|
|
|
expect(kwargs).to eq(chdir: '/srv/nizika-nico')
|
|
|
|
['', '', success_status]
|
|
end
|
|
|
|
task.invoke
|
|
end
|
|
|
|
it 'deduplicates video ids' do
|
|
create_post('https://www.nicovideo.jp/watch/sm12345')
|
|
create_post('https://www.nicovideo.jp/watch/sm12345?from=1')
|
|
|
|
expect(Open3).to receive(:capture3) do |_env, *args, **_kwargs|
|
|
expect(args.drop(3)).to eq(['sm12345'])
|
|
|
|
['', '', success_status]
|
|
end
|
|
|
|
task.invoke
|
|
end
|
|
|
|
it 'does not call python when there are no nicovideo posts' do
|
|
create_post('https://example.com/watch/sm12345')
|
|
|
|
expect(Open3).not_to receive(:capture3)
|
|
|
|
task.invoke
|
|
end
|
|
|
|
it 'raises stderr when python command fails' do
|
|
create_post('https://www.nicovideo.jp/watch/sm12345')
|
|
|
|
allow(Open3).to receive(:capture3).and_return(
|
|
[
|
|
'',
|
|
'bulk upsert failed',
|
|
failure_status,
|
|
],
|
|
)
|
|
|
|
expect {
|
|
task.invoke
|
|
}.to raise_error(RuntimeError, 'bulk upsert failed')
|
|
end
|
|
end
|
|
end
|