diff --git a/CHANGELOG.md b/CHANGELOG.md index ca9480bc..ca997d15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [0.1.6] - 2024-04-06 +## [0.1.6] — 2024-04-06 You can now use [Overland](https://overland.p3k.app/) mobile app to track your location. @@ -17,7 +17,7 @@ You can now use [Overland](https://overland.p3k.app/) mobile app to track your l ### Fixed -## [0.1.5] - 2024-04-05 +## [0.1.5] — 2024-04-05 You can now specify the host of the application by setting the `APPLICATION_HOST` environment variable in the `docker-compose.yml` file. diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index a50f6d76..dfdff6af 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -15,13 +15,18 @@ class ImportsController < ApplicationController def create files = import_params[:files].reject(&:blank?) - files.each do |file| + import_ids = files.map do |file| import = current_user.imports.create( name: file.original_filename, source: params[:import][:source] ) import.file.attach(file) + import.id + end + + import_ids.each do |import_id| + ImportJob.set(wait: 5.seconds).perform_later(current_user.id, import_id) end redirect_to imports_url, notice: "#{files.size} files are queued to be imported in background", status: :see_other diff --git a/app/models/import.rb b/app/models/import.rb index 44a0233f..fbf04014 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -5,12 +5,4 @@ class Import < ApplicationRecord has_one_attached :file enum source: { google: 0, owntracks: 1 } - - after_create_commit :async_import - - private - - def async_import - ImportJob.perform_later(user.id, self.id) - end end diff --git a/docker-compose.yml b/docker-compose.yml index ba9c6324..2436b801 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,6 +56,7 @@ services: tty: true entrypoint: dev-entrypoint.sh command: ['sidekiq'] + restart: on-failure environment: RAILS_ENV: development REDIS_URL: redis://dawarich_redis:6379/0 diff --git a/rename_app.rb b/rename_app.rb deleted file mode 100644 index 06303f4c..00000000 --- a/rename_app.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -old_snake_case_name = ARGV[0] -old_camel_case_name = ARGV[0].to_s.split('_').collect(&:capitalize).join -new_snake_case_name = ARGV[1] -new_camel_case_name = ARGV[1].to_s.split('_').collect(&:capitalize).join - -`sed -i '' -e 's/#{old_snake_case_name}/#{new_snake_case_name}/g' $(find . -type f)` -`sed -i '' -e 's/#{old_camel_case_name}/#{new_camel_case_name}/g' $(find . -type f)` diff --git a/spec/fixtures/overland/geodata.json b/spec/fixtures/files/overland/geodata.json similarity index 100% rename from spec/fixtures/overland/geodata.json rename to spec/fixtures/files/overland/geodata.json diff --git a/spec/fixtures/owntracks_export.json b/spec/fixtures/files/owntracks/export.json similarity index 100% rename from spec/fixtures/owntracks_export.json rename to spec/fixtures/files/owntracks/export.json diff --git a/spec/jobs/import_job_spec.rb b/spec/jobs/import_job_spec.rb index 926400c8..9bfb0b62 100644 --- a/spec/jobs/import_job_spec.rb +++ b/spec/jobs/import_job_spec.rb @@ -4,7 +4,7 @@ RSpec.describe ImportJob, type: :job do describe '#perform' do subject(:perform) { described_class.new.perform(user.id, import.id) } - let(:file_path) { 'spec/fixtures/owntracks_export.json' } + let(:file_path) { 'spec/fixtures/files/owntracks/export.json' } let(:file) { fixture_file_upload(file_path) } let(:user) { create(:user) } let(:import) { create(:import, user: user, file: file, name: File.basename(file.path)) } diff --git a/spec/jobs/overland/batch_creating_job_spec.rb b/spec/jobs/overland/batch_creating_job_spec.rb index cf19bb7e..63f5e2c8 100644 --- a/spec/jobs/overland/batch_creating_job_spec.rb +++ b/spec/jobs/overland/batch_creating_job_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Overland::BatchCreatingJob, type: :job do describe '#perform' do subject(:perform) { described_class.new.perform(json) } - let(:file_path) { 'spec/fixtures/overland/geodata.json' } + let(:file_path) { 'spec/fixtures/files/overland/geodata.json' } let(:file) { File.open(file_path) } let(:json) { JSON.parse(file.read) } diff --git a/spec/requests/api/v1/overland/batches_spec.rb b/spec/requests/api/v1/overland/batches_spec.rb index 3e0e93e9..e746e91b 100644 --- a/spec/requests/api/v1/overland/batches_spec.rb +++ b/spec/requests/api/v1/overland/batches_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' RSpec.describe "Api::V1::Overland::Batches", type: :request do describe "POST /index" do - let(:file_path) { 'spec/fixtures/overland/geodata.json' } + let(:file_path) { 'spec/fixtures/files/overland/geodata.json' } let(:file) { File.open(file_path) } let(:json) { JSON.parse(file.read) } let(:params) { json } diff --git a/spec/requests/imports_spec.rb b/spec/requests/imports_spec.rb new file mode 100644 index 00000000..edc2e08e --- /dev/null +++ b/spec/requests/imports_spec.rb @@ -0,0 +1,52 @@ +require 'rails_helper' + +RSpec.describe "Imports", type: :request do + describe "GET /imports" do + context 'when user is logged in' do + let(:user) { create(:user) } + + before do + sign_in user + end + + it "returns http success" do + get imports_path + + expect(response).to have_http_status(200) + end + + context 'when user has imports' do + let!(:import) { create(:import, user: user) } + + it 'displays imports' do + get imports_path + + expect(response.body).to include(import.name) + end + end + end + end + + describe "POST /imports" do + context 'when user is logged in' do + let(:user) { create(:user) } + let(:file) { fixture_file_upload('owntracks/export.json', 'application/json') } + + before { sign_in user } + + it 'queues import job' do + expect { + post imports_path, params: { import: { source: 'owntracks', files: [file] } } + }.to have_enqueued_job(ImportJob).on_queue('default').at_least(1).times + end + + it 'creates a new import' do + expect { + post imports_path, params: { import: { source: 'owntracks', files: [file] } } + }.to change(user.imports, :count).by(1) + + expect(response).to redirect_to(imports_path) + end + end + end +end diff --git a/spec/services/overland/params_spec.rb b/spec/services/overland/params_spec.rb index 6c8fcea1..f0390ad6 100644 --- a/spec/services/overland/params_spec.rb +++ b/spec/services/overland/params_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' RSpec.describe Overland::Params do describe '#call' do - let(:file_path) { 'spec/fixtures/overland/geodata.json' } + let(:file_path) { 'spec/fixtures/files/overland/geodata.json' } let(:file) { File.open(file_path) } let(:json) { JSON.parse(file.read) } diff --git a/spec/services/own_tracks/export_parser_spec.rb b/spec/services/own_tracks/export_parser_spec.rb index d261c762..5748f863 100644 --- a/spec/services/own_tracks/export_parser_spec.rb +++ b/spec/services/own_tracks/export_parser_spec.rb @@ -4,7 +4,7 @@ RSpec.describe OwnTracks::ExportParser do describe '#call' do subject(:parser) { described_class.new(import).call } - let(:file_path) { 'spec/fixtures/owntracks_export.json' } + let(:file_path) { 'spec/fixtures/files/owntracks/export.json' } let(:file) { fixture_file_upload(file_path) } let(:user) { create(:user) } let(:import) { create(:import, user: user, file: file, name: File.basename(file.path)) } diff --git a/spec/services/own_tracks/params_spec.rb b/spec/services/own_tracks/params_spec.rb index 42188694..ded525f8 100644 --- a/spec/services/own_tracks/params_spec.rb +++ b/spec/services/own_tracks/params_spec.rb @@ -4,7 +4,7 @@ RSpec.describe OwnTracks::Params do describe '#call' do subject(:params) { described_class.new(raw_point_params).call } - let(:file_path) { 'spec/fixtures/owntracks_export.json' } + let(:file_path) { 'spec/fixtures/files/owntracks/export.json' } let(:file) { File.open(file_path) } let(:json) { JSON.parse(file.read) } let(:user) { json.keys.first } diff --git a/test-docker-entrypoint.sh b/test-docker-entrypoint.sh deleted file mode 100644 index a434be12..00000000 --- a/test-docker-entrypoint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -set -e - -echo "Environment: $RAILS_ENV" - -# Check if we need to install new gems -bundle check || bundle install --jobs 20 --retry 5 - -# Then run any passed command -bundle exec ${@}