このコミットが含まれているのは:
@@ -14,7 +14,7 @@ RSpec.describe 'Counts native GET acknowledgement', type: :request do
|
||||
allow(CountsExportDownload).to receive(:directory).and_return(@counts_download_dir)
|
||||
end
|
||||
|
||||
def ready_job(format)
|
||||
def ready_job(format, payload: 'payload')
|
||||
CountsExportJobs.pulse
|
||||
post '/counts/export/jobs', params: { resource: 'posts', definition: 'history',
|
||||
mode: 'details', columns: 'resource_id', locale: 'ja', format: }
|
||||
@@ -22,7 +22,7 @@ RSpec.describe 'Counts native GET acknowledgement', type: :request do
|
||||
job = response.parsed_body.fetch('job')
|
||||
signature = CountsExportJobs.verifier.verified(job, purpose: 'counts_export_job')
|
||||
owner = signature.fetch('owner')
|
||||
exporter = instance_double(CountsExporter, resource: 'posts', format:, body: ['payload'])
|
||||
exporter = instance_double(CountsExporter, resource: 'posts', format:, body: [payload])
|
||||
file = HistoryAccess.set(user: nil) { CountsExportDownload.prepare(exporter, owner) }
|
||||
state = CountsExportJobs.read(signature.fetch('id'))
|
||||
state.merge!('status' => 'ready', 'token' => file)
|
||||
@@ -33,6 +33,28 @@ RSpec.describe 'Counts native GET acknowledgement', type: :request do
|
||||
end
|
||||
|
||||
['csv', 'json'].each do |format|
|
||||
it "delivers every byte of a multi-chunk #{ format } file through HTTP" do
|
||||
sign_in_as(create(:user, :member))
|
||||
rows = Array.new(5000) { |index| { id: index, name: '日本語,名称' } }
|
||||
payload = if format == 'json'
|
||||
rows.to_json
|
||||
else
|
||||
"id,name\r\n" + rows.map { CSV.generate_line(_1.values) }.join
|
||||
end
|
||||
job, file, attempt = ready_job(format, payload:)
|
||||
owner = CountsExportJobs.verifier.verified(job, purpose: 'counts_export_job').fetch('owner')
|
||||
metadata = HistoryAccess.set(user: nil) { CountsExportDownload.find(file, owner) }
|
||||
expected = File.binread(metadata.fetch('path'))
|
||||
expect(expected.bytesize).to be > 64 * 1024
|
||||
get "/counts/export/files/#{ file }", params: { job:, attempt: }
|
||||
expect(response).to have_http_status(:ok)
|
||||
expect(response.body.bytesize).to eq(expected.bytesize)
|
||||
expect(response.body.b).to eq(expected)
|
||||
expect(response.body.b).to eq(payload.b)
|
||||
get "/counts/export/jobs/#{ job }"
|
||||
expect(response.parsed_body['download_status']).to eq('started')
|
||||
end
|
||||
|
||||
it "acknowledges only an authorised #{ format } GET body, not HEAD or acceptance" do
|
||||
job, file, attempt = ready_job(format)
|
||||
get "/counts/export/jobs/#{ job }"
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする