FIX: remote theme record not saved when checking for updates (#8054)

FIX: remote theme record not saved when checking for updates (#8054)

diff --git a/app/controllers/admin/themes_controller.rb b/app/controllers/admin/themes_controller.rb
index 4def5bd..b9b34af 100644
--- a/app/controllers/admin/themes_controller.rb
+++ b/app/controllers/admin/themes_controller.rb
@@ -186,22 +186,16 @@ class Admin::ThemesController < Admin::AdminController
     update_translations
     handle_switch
 
-    save_remote = false
     if params[:theme][:remote_check]
       @theme.remote_theme.update_remote_version
-      save_remote = true
     end
 
     if params[:theme][:remote_update]
       @theme.remote_theme.update_from_remote
-      save_remote = true
     end
 
     respond_to do |format|
       if @theme.save
-
-        @theme.remote_theme.save! if save_remote
-
         update_default_theme
 
         @theme.reload
diff --git a/app/models/remote_theme.rb b/app/models/remote_theme.rb
index 38da1d0..16b5857 100644
--- a/app/models/remote_theme.rb
+++ b/app/models/remote_theme.rb
@@ -106,6 +106,8 @@ class RemoteTheme < ActiveRecord::Base
       self.updated_at = Time.zone.now
       self.remote_version, self.commits_behind = importer.commits_since(local_version)
       self.last_error_text = nil
+    ensure
+      self.save!
     end
   end
 
@@ -119,6 +121,7 @@ class RemoteTheme < ActiveRecord::Base
         importer.import!
       rescue RemoteTheme::ImportError => err
         self.last_error_text = err.message
+        self.save!
         return self
       else
         self.last_error_text = nil
@@ -163,6 +166,7 @@ class RemoteTheme < ActiveRecord::Base
 
     update_theme_color_schemes(theme, theme_info["color_schemes"]) unless theme.component
 
+    self.save!
     self
   ensure
     begin
diff --git a/spec/requests/admin/themes_controller_spec.rb b/spec/requests/admin/themes_controller_spec.rb
index 36fd5f6..b3d5acd 100644
--- a/spec/requests/admin/themes_controller_spec.rb
+++ b/spec/requests/admin/themes_controller_spec.rb
@@ -330,6 +330,22 @@ describe Admin::ThemesController do
       expect(theme.theme_translation_overrides.count).to eq(0)
     end
 
+    it 'checking for updates saves the remote_theme record' do
+      theme.remote_theme = RemoteTheme.create!(remote_url: "http://discourse.org", remote_version: "a", local_version: "a", commits_behind: 0)
+      theme.save!
+      ThemeStore::GitImporter.any_instance.stubs(:import!)
+      ThemeStore::GitImporter.any_instance.stubs(:commits_since).returns(["b", 1])
+
+      put "/admin/themes/#{theme.id}.json", params: {
+        theme: {
+          remote_check: true
+        }
+      }
+      theme.reload
+      expect(theme.remote_theme.remote_version).to eq("b")
+      expect(theme.remote_theme.commits_behind).to eq(1)
+    end
+
     it 'can disable component' do
       child = Fabricate(:theme, component: true)

GitHub sha: ff8cc244

1 Like