From f080b4c6ce2225987e2a88f1bd3ac924d7446f2a Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Fri, 12 Jul 2024 21:59:03 +0200 Subject: [PATCH] Add tests for background jobs stuff --- .app_version | 2 +- CHANGELOG.md | 14 ++ .../settings/background_jobs_controller.rb | 10 -- .../settings/background_jobs_helper.rb | 2 - app/jobs/reverse_geocoding_job.rb | 10 +- app/models/point.rb | 4 +- app/services/reverse_geocoding/fetch_data.rb | 26 +++ .../background_jobs/_background_job.html.erb | 2 - .../settings/background_jobs/_form.html.erb | 17 -- .../settings/background_jobs/edit.html.erb | 8 - .../settings/background_jobs/index.html.erb | 6 +- .../settings/background_jobs/new.html.erb | 7 - .../settings/background_jobs/show.html.erb | 15 -- config/initializers/geocoder.rb | 5 +- config/routes.rb | 2 +- .../20240712141303_add_geodata_to_points.rb | 8 + db/schema.rb | 4 +- spec/factories/points.rb | 1 + .../enqueue_reverse_geocoding_job_spec.rb | 11 +- spec/jobs/reverse_geocoding_job_spec.rb | 37 ++--- spec/models/point_spec.rb | 22 ++- .../requests/settings/background_jobs_spec.rb | 154 +++++------------- spec/services/jobs/create_spec.rb | 50 ++++++ .../reverse_geocoding/fetch_data_spec.rb | 64 ++++++++ 24 files changed, 264 insertions(+), 217 deletions(-) delete mode 100644 app/helpers/settings/background_jobs_helper.rb create mode 100644 app/services/reverse_geocoding/fetch_data.rb delete mode 100644 app/views/settings/background_jobs/_background_job.html.erb delete mode 100644 app/views/settings/background_jobs/_form.html.erb delete mode 100644 app/views/settings/background_jobs/edit.html.erb delete mode 100644 app/views/settings/background_jobs/new.html.erb delete mode 100644 app/views/settings/background_jobs/show.html.erb create mode 100644 db/migrate/20240712141303_add_geodata_to_points.rb create mode 100644 spec/services/jobs/create_spec.rb create mode 100644 spec/services/reverse_geocoding/fetch_data_spec.rb diff --git a/.app_version b/.app_version index 1e9b46b2..ac39a106 100644 --- a/.app_version +++ b/.app_version @@ -1 +1 @@ -0.8.7 +0.9.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 93bf2ad6..07028947 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,20 @@ 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.9.0] — 2024-07-12 + +### Added + +- Background jobs page. You can find it in Settings -> Backgroun Jobs. +- Queue clearing buttons. You can clear all jobs in the queue. +- Reverse geocoding restart button. You can restart the reverse geocoding process for all of your points. +- Reverse geocoding continue button. Click on this button will start reverse geocoding process only for points that were not processed yet. +- A lot more data is now being saved in terms of reverse geocoding process. It will be used in the future to create more insights about your data. + +### Changed + +- Point reference to a user is no longer optional. It should not cause any problems, but if you see any issues, please let me know. + ## [0.8.7] — 2024-07-09 ### Changed diff --git a/app/controllers/settings/background_jobs_controller.rb b/app/controllers/settings/background_jobs_controller.rb index d713b108..6ebc3b94 100644 --- a/app/controllers/settings/background_jobs_controller.rb +++ b/app/controllers/settings/background_jobs_controller.rb @@ -8,13 +8,6 @@ class Settings::BackgroundJobsController < ApplicationController @queues = Sidekiq::Queue.all end - def show; end - - def new - end - - def edit; end - def create EnqueueReverseGeocodingJob.perform_later(params[:job_name], current_user.id) @@ -23,9 +16,6 @@ class Settings::BackgroundJobsController < ApplicationController redirect_to settings_background_jobs_path, notice: 'Job was successfully created.' end - def update - end - def destroy # Clear all jobs in the queue, params[:id] contains queue name queue = Sidekiq::Queue.new(params[:id]) diff --git a/app/helpers/settings/background_jobs_helper.rb b/app/helpers/settings/background_jobs_helper.rb deleted file mode 100644 index 3a150599..00000000 --- a/app/helpers/settings/background_jobs_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module Settings::BackgroundJobsHelper -end diff --git a/app/jobs/reverse_geocoding_job.rb b/app/jobs/reverse_geocoding_job.rb index 6921ffa4..75bcd5d4 100644 --- a/app/jobs/reverse_geocoding_job.rb +++ b/app/jobs/reverse_geocoding_job.rb @@ -6,14 +6,6 @@ class ReverseGeocodingJob < ApplicationJob def perform(point_id) return unless REVERSE_GEOCODING_ENABLED - point = Point.find(point_id) - return if point.city.present? && point.country.present? - - result = Geocoder.search([point.latitude, point.longitude]) - return if result.blank? - - point.update!(city: result.first.city, country: result.first.country) - rescue ActiveRecord::RecordNotFound => e - Rails.logger.error("Point with id #{point_id} not found: #{e.message}") + ReverseGeocoding::FetchData.new(point_id).call end end diff --git a/app/models/point.rb b/app/models/point.rb index 9ed0aa9d..9bd22f52 100644 --- a/app/models/point.rb +++ b/app/models/point.rb @@ -1,8 +1,10 @@ # frozen_string_literal: true class Point < ApplicationRecord + reverse_geocoded_by :latitude, :longitude + belongs_to :import, optional: true - belongs_to :user, optional: true + belongs_to :user validates :latitude, :longitude, :timestamp, presence: true diff --git a/app/services/reverse_geocoding/fetch_data.rb b/app/services/reverse_geocoding/fetch_data.rb new file mode 100644 index 00000000..7be065fd --- /dev/null +++ b/app/services/reverse_geocoding/fetch_data.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class ReverseGeocoding::FetchData + attr_reader :point + + def initialize(point_id) + @point = Point.find(point_id) + rescue ActiveRecord::RecordNotFound => e + Rails.logger.error("Point with id #{point_id} not found: #{e.message}") + end + + def call + return if reverse_geocoded? + + response = Geocoder.search([point.latitude, point.longitude]).first + return if response.blank? || response.data['error'].present? + + point.update!(city: response.city, country: response.country, geodata: response.data) + end + + private + + def reverse_geocoded? + point.city.present? && point.country.present? || point.geodata.present? + end +end diff --git a/app/views/settings/background_jobs/_background_job.html.erb b/app/views/settings/background_jobs/_background_job.html.erb deleted file mode 100644 index f67e58ce..00000000 --- a/app/views/settings/background_jobs/_background_job.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -
-
diff --git a/app/views/settings/background_jobs/_form.html.erb b/app/views/settings/background_jobs/_form.html.erb deleted file mode 100644 index e0992e34..00000000 --- a/app/views/settings/background_jobs/_form.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<%= form_with(model: settings_background_job, class: "contents") do |form| %> - <% if settings_background_job.errors.any? %> -
-

<%= pluralize(settings_background_job.errors.count, "error") %> prohibited this settings_background_job from being saved:

- - -
- <% end %> - -
- <%= form.submit class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium cursor-pointer" %> -
-<% end %> diff --git a/app/views/settings/background_jobs/edit.html.erb b/app/views/settings/background_jobs/edit.html.erb deleted file mode 100644 index 7351eb69..00000000 --- a/app/views/settings/background_jobs/edit.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -
-

Editing background job

- - <%= render "form", settings_background_job: @settings_background_job %> - - <%= link_to "Show this background job", @settings_background_job, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %> - <%= link_to "Back to background jobs", settings_background_jobs_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %> -
diff --git a/app/views/settings/background_jobs/index.html.erb b/app/views/settings/background_jobs/index.html.erb index 3343449e..3b216c76 100644 --- a/app/views/settings/background_jobs/index.html.erb +++ b/app/views/settings/background_jobs/index.html.erb @@ -7,7 +7,7 @@

Background jobs

-