14873: Fixes unit tests.
[arvados.git] / services / api / app / models / collection.rb
index 6147b79f9f5aa16c6b9e24ef5164bab43139373a..cb23df1c219ef4404a2023e824303bf54d7922ff 100644 (file)
@@ -14,10 +14,10 @@ class Collection < ArvadosModel
   include CommonApiTemplate
   include Trashable
 
-  serialize :properties, Hash
-  serialize :storage_classes_desired, Array
-  serialize :storage_classes_confirmed, Array
+  # Posgresql JSONB columns should NOT be declared as serialized, Rails 5
+  # already know how to properly treat them.
 
+  before_validation :fill_field_defaults
   before_validation :default_empty_manifest
   before_validation :default_storage_classes, on: :create
   before_validation :check_encoding
@@ -83,7 +83,7 @@ class Collection < ArvadosModel
 
   FILE_TOKEN = /^[[:digit:]]+:[[:digit:]]+:/
   def check_signatures
-    return false if self.manifest_text.nil?
+    throw(:abort) if self.manifest_text.nil?
 
     return true if current_user.andand.is_admin
 
@@ -316,9 +316,7 @@ class Collection < ArvadosModel
   end
 
   def check_encoding
-    if manifest_text.encoding.name == 'UTF-8' and manifest_text.valid_encoding?
-      true
-    else
+    if !(manifest_text.encoding.name == 'UTF-8' and manifest_text.valid_encoding?)
       begin
         # If Ruby thinks the encoding is something else, like 7-bit
         # ASCII, but its stored bytes are equal to the (valid) UTF-8
@@ -333,7 +331,7 @@ class Collection < ArvadosModel
       rescue
       end
       errors.add :manifest_text, "must use UTF-8 encoding"
-      false
+      throw(:abort)
     end
   end
 
@@ -343,7 +341,7 @@ class Collection < ArvadosModel
       true
     rescue ArgumentError => e
       errors.add :manifest_text, e.message
-      false
+      throw(:abort)
     end
   end
 
@@ -655,4 +653,10 @@ class Collection < ArvadosModel
     self.current_version_uuid ||= self.uuid
     true
   end
+
+  def fill_field_defaults
+    self.properties ||= {}
+    self.storage_classes_desired ||= []
+    self.storage_classes_confirmed ||= []
+  end
 end