From 421be01dabb13cd1f45d0118b4e1be9d33baef61 Mon Sep 17 00:00:00 2001
From: Kamil Trzcinski <ayufan@ayufan.eu>
Date: Fri, 10 Jun 2016 21:45:06 +0200
Subject: [PATCH] Improve design based on review

---
 app/models/ci/build.rb                        |   9 +-
 doc/api/builds.md                             | 528 +++++++++---------
 lib/api/builds.rb                             |   5 +-
 lib/ci/api/entities.rb                        |   4 +-
 spec/features/builds_spec.rb                  |   8 +-
 spec/models/build_spec.rb                     |   3 +
 spec/requests/api/builds_spec.rb              |   7 +-
 spec/requests/ci/api/builds_spec.rb           |   6 +-
 .../expire_build_artifacts_worker_spec.rb     |  18 +-
 9 files changed, 296 insertions(+), 292 deletions(-)

diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 80702b274dd..89a1f8b3f57 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -360,11 +360,10 @@ module Ci
     end
 
     def artifacts_expire_in=(value)
-      if value
-        self.artifacts_expire_at = Time.now + ChronicDuration.parse(value)
-      else
-        self.artifacts_expire_at = nil
-      end
+      self.artifacts_expire_at =
+        if value
+          Time.now + ChronicDuration.parse(value)
+        end
     end
 
     def keep_artifacts!
diff --git a/doc/api/builds.md b/doc/api/builds.md
index 0f9f4e99ea2..de998944352 100644
--- a/doc/api/builds.md
+++ b/doc/api/builds.md
@@ -21,85 +21,85 @@ Example of response
 
 ```json
 [
-    {
-        "commit": {
-            "author_email": "admin@example.com",
-            "author_name": "Administrator",
-            "created_at": "2015-12-24T16:51:14.000+01:00",
-            "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-            "message": "Test the CI integration.",
-            "short_id": "0ff3ae19",
-            "title": "Test the CI integration."
-        },
-        "coverage": null,
-        "created_at": "2015-12-24T15:51:21.802Z",
-        "artifacts_file": {
-          "filename": "artifacts.zip",
-          "size": 1000
-        },
-        "finished_at": "2015-12-24T17:54:27.895Z",
-        "id": 7,
-        "name": "teaspoon",
-        "ref": "master",
-        "runner": null,
-        "stage": "test",
-        "started_at": "2015-12-24T17:54:27.722Z",
-        "status": "failed",
-        "tag": false,
-        "user": {
-            "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-            "bio": null,
-            "created_at": "2015-12-21T13:14:24.077Z",
-            "id": 1,
-            "is_admin": true,
-            "linkedin": "",
-            "name": "Administrator",
-            "skype": "",
-            "state": "active",
-            "twitter": "",
-            "username": "root",
-            "web_url": "http://gitlab.dev/u/root",
-            "website_url": ""
-        }
+  {
+    "commit": {
+      "author_email": "admin@example.com",
+      "author_name": "Administrator",
+      "created_at": "2015-12-24T16:51:14.000+01:00",
+      "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+      "message": "Test the CI integration.",
+      "short_id": "0ff3ae19",
+      "title": "Test the CI integration."
+    },
+    "coverage": null,
+    "created_at": "2015-12-24T15:51:21.802Z",
+    "artifacts_file": {
+      "filename": "artifacts.zip",
+      "size": 1000
+    },
+    "finished_at": "2015-12-24T17:54:27.895Z",
+    "id": 7,
+    "name": "teaspoon",
+    "ref": "master",
+    "runner": null,
+    "stage": "test",
+    "started_at": "2015-12-24T17:54:27.722Z",
+    "status": "failed",
+    "tag": false,
+    "user": {
+      "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+      "bio": null,
+      "created_at": "2015-12-21T13:14:24.077Z",
+      "id": 1,
+      "is_admin": true,
+      "linkedin": "",
+      "name": "Administrator",
+      "skype": "",
+      "state": "active",
+      "twitter": "",
+      "username": "root",
+      "web_url": "http://gitlab.dev/u/root",
+      "website_url": ""
+    }
+  },
+  {
+    "commit": {
+      "author_email": "admin@example.com",
+      "author_name": "Administrator",
+      "created_at": "2015-12-24T16:51:14.000+01:00",
+      "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+      "message": "Test the CI integration.",
+      "short_id": "0ff3ae19",
+      "title": "Test the CI integration."
     },
-    {
-        "commit": {
-            "author_email": "admin@example.com",
-            "author_name": "Administrator",
-            "created_at": "2015-12-24T16:51:14.000+01:00",
-            "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-            "message": "Test the CI integration.",
-            "short_id": "0ff3ae19",
-            "title": "Test the CI integration."
-        },
-        "coverage": null,
-        "created_at": "2015-12-24T15:51:21.727Z",
-        "artifacts_file": null,
-        "finished_at": "2015-12-24T17:54:24.921Z",
-        "id": 6,
-        "name": "spinach:other",
-        "ref": "master",
-        "runner": null,
-        "stage": "test",
-        "started_at": "2015-12-24T17:54:24.729Z",
-        "status": "failed",
-        "tag": false,
-        "user": {
-            "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-            "bio": null,
-            "created_at": "2015-12-21T13:14:24.077Z",
-            "id": 1,
-            "is_admin": true,
-            "linkedin": "",
-            "name": "Administrator",
-            "skype": "",
-            "state": "active",
-            "twitter": "",
-            "username": "root",
-            "web_url": "http://gitlab.dev/u/root",
-            "website_url": ""
-        }
+    "coverage": null,
+    "created_at": "2015-12-24T15:51:21.727Z",
+    "artifacts_file": null,
+    "finished_at": "2015-12-24T17:54:24.921Z",
+    "id": 6,
+    "name": "spinach:other",
+    "ref": "master",
+    "runner": null,
+    "stage": "test",
+    "started_at": "2015-12-24T17:54:24.729Z",
+    "status": "failed",
+    "tag": false,
+    "user": {
+      "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+      "bio": null,
+      "created_at": "2015-12-21T13:14:24.077Z",
+      "id": 1,
+      "is_admin": true,
+      "linkedin": "",
+      "name": "Administrator",
+      "skype": "",
+      "state": "active",
+      "twitter": "",
+      "username": "root",
+      "web_url": "http://gitlab.dev/u/root",
+      "website_url": ""
     }
+  }
 ]
 ```
 
@@ -125,68 +125,68 @@ Example of response
 
 ```json
 [
-    {
-        "commit": {
-            "author_email": "admin@example.com",
-            "author_name": "Administrator",
-            "created_at": "2015-12-24T16:51:14.000+01:00",
-            "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-            "message": "Test the CI integration.",
-            "short_id": "0ff3ae19",
-            "title": "Test the CI integration."
-        },
-        "coverage": null,
-        "created_at": "2016-01-11T10:13:33.506Z",
-        "artifacts_file": null,
-        "finished_at": "2016-01-11T10:14:09.526Z",
-        "id": 69,
-        "name": "rubocop",
-        "ref": "master",
-        "runner": null,
-        "stage": "test",
-        "started_at": null,
-        "status": "canceled",
-        "tag": false,
-        "user": null
+  {
+    "commit": {
+      "author_email": "admin@example.com",
+      "author_name": "Administrator",
+      "created_at": "2015-12-24T16:51:14.000+01:00",
+      "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+      "message": "Test the CI integration.",
+      "short_id": "0ff3ae19",
+      "title": "Test the CI integration."
     },
-    {
-        "commit": {
-            "author_email": "admin@example.com",
-            "author_name": "Administrator",
-            "created_at": "2015-12-24T16:51:14.000+01:00",
-            "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-            "message": "Test the CI integration.",
-            "short_id": "0ff3ae19",
-            "title": "Test the CI integration."
-        },
-        "coverage": null,
-        "created_at": "2015-12-24T15:51:21.957Z",
-        "artifacts_file": null,
-        "finished_at": "2015-12-24T17:54:33.913Z",
-        "id": 9,
-        "name": "brakeman",
-        "ref": "master",
-        "runner": null,
-        "stage": "test",
-        "started_at": "2015-12-24T17:54:33.727Z",
-        "status": "failed",
-        "tag": false,
-        "user": {
-            "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-            "bio": null,
-            "created_at": "2015-12-21T13:14:24.077Z",
-            "id": 1,
-            "is_admin": true,
-            "linkedin": "",
-            "name": "Administrator",
-            "skype": "",
-            "state": "active",
-            "twitter": "",
-            "username": "root",
-            "web_url": "http://gitlab.dev/u/root",
-            "website_url": ""
-        }
+    "coverage": null,
+    "created_at": "2016-01-11T10:13:33.506Z",
+    "artifacts_file": null,
+    "finished_at": "2016-01-11T10:14:09.526Z",
+    "id": 69,
+    "name": "rubocop",
+    "ref": "master",
+    "runner": null,
+    "stage": "test",
+    "started_at": null,
+    "status": "canceled",
+    "tag": false,
+    "user": null
+  },
+  {
+    "commit": {
+      "author_email": "admin@example.com",
+      "author_name": "Administrator",
+      "created_at": "2015-12-24T16:51:14.000+01:00",
+      "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+      "message": "Test the CI integration.",
+      "short_id": "0ff3ae19",
+      "title": "Test the CI integration."
+    },
+    "coverage": null,
+    "created_at": "2015-12-24T15:51:21.957Z",
+    "artifacts_file": null,
+    "finished_at": "2015-12-24T17:54:33.913Z",
+    "id": 9,
+    "name": "brakeman",
+    "ref": "master",
+    "runner": null,
+    "stage": "test",
+    "started_at": "2015-12-24T17:54:33.727Z",
+    "status": "failed",
+    "tag": false,
+    "user": {
+      "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+      "bio": null,
+      "created_at": "2015-12-21T13:14:24.077Z",
+      "id": 1,
+      "is_admin": true,
+      "linkedin": "",
+      "name": "Administrator",
+      "skype": "",
+      "state": "active",
+      "twitter": "",
+      "username": "root",
+      "web_url": "http://gitlab.dev/u/root",
+      "website_url": ""
     }
+  }
 ]
 ```
 
@@ -211,42 +211,42 @@ Example of response
 
 ```json
 {
-    "commit": {
-        "author_email": "admin@example.com",
-        "author_name": "Administrator",
-        "created_at": "2015-12-24T16:51:14.000+01:00",
-        "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-        "message": "Test the CI integration.",
-        "short_id": "0ff3ae19",
-        "title": "Test the CI integration."
-    },
-    "coverage": null,
-    "created_at": "2015-12-24T15:51:21.880Z",
-    "artifacts_file": null,
-    "finished_at": "2015-12-24T17:54:31.198Z",
-    "id": 8,
-    "name": "rubocop",
-    "ref": "master",
-    "runner": null,
-    "stage": "test",
-    "started_at": "2015-12-24T17:54:30.733Z",
-    "status": "failed",
-    "tag": false,
-    "user": {
-        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
-        "bio": null,
-        "created_at": "2015-12-21T13:14:24.077Z",
-        "id": 1,
-        "is_admin": true,
-        "linkedin": "",
-        "name": "Administrator",
-        "skype": "",
-        "state": "active",
-        "twitter": "",
-        "username": "root",
-        "web_url": "http://gitlab.dev/u/root",
-        "website_url": ""
-    }
+  "commit": {
+    "author_email": "admin@example.com",
+    "author_name": "Administrator",
+    "created_at": "2015-12-24T16:51:14.000+01:00",
+    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+    "message": "Test the CI integration.",
+    "short_id": "0ff3ae19",
+    "title": "Test the CI integration."
+  },
+  "coverage": null,
+  "created_at": "2015-12-24T15:51:21.880Z",
+  "artifacts_file": null,
+  "finished_at": "2015-12-24T17:54:31.198Z",
+  "id": 8,
+  "name": "rubocop",
+  "ref": "master",
+  "runner": null,
+  "stage": "test",
+  "started_at": "2015-12-24T17:54:30.733Z",
+  "status": "failed",
+  "tag": false,
+  "user": {
+    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
+    "bio": null,
+    "created_at": "2015-12-21T13:14:24.077Z",
+    "id": 1,
+    "is_admin": true,
+    "linkedin": "",
+    "name": "Administrator",
+    "skype": "",
+    "state": "active",
+    "twitter": "",
+    "username": "root",
+    "web_url": "http://gitlab.dev/u/root",
+    "website_url": ""
+  }
 }
 ```
 
@@ -323,28 +323,28 @@ Example of response
 
 ```json
 {
-    "commit": {
-        "author_email": "admin@example.com",
-        "author_name": "Administrator",
-        "created_at": "2015-12-24T16:51:14.000+01:00",
-        "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-        "message": "Test the CI integration.",
-        "short_id": "0ff3ae19",
-        "title": "Test the CI integration."
-    },
-    "coverage": null,
-    "created_at": "2016-01-11T10:13:33.506Z",
-    "artifacts_file": null,
-    "finished_at": "2016-01-11T10:14:09.526Z",
-    "id": 69,
-    "name": "rubocop",
-    "ref": "master",
-    "runner": null,
-    "stage": "test",
-    "started_at": null,
-    "status": "canceled",
-    "tag": false,
-    "user": null
+  "commit": {
+    "author_email": "admin@example.com",
+    "author_name": "Administrator",
+    "created_at": "2015-12-24T16:51:14.000+01:00",
+    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+    "message": "Test the CI integration.",
+    "short_id": "0ff3ae19",
+    "title": "Test the CI integration."
+  },
+  "coverage": null,
+  "created_at": "2016-01-11T10:13:33.506Z",
+  "artifacts_file": null,
+  "finished_at": "2016-01-11T10:14:09.526Z",
+  "id": 69,
+  "name": "rubocop",
+  "ref": "master",
+  "runner": null,
+  "stage": "test",
+  "started_at": null,
+  "status": "canceled",
+  "tag": false,
+  "user": null
 }
 ```
 
@@ -369,28 +369,28 @@ Example of response
 
 ```json
 {
-    "commit": {
-        "author_email": "admin@example.com",
-        "author_name": "Administrator",
-        "created_at": "2015-12-24T16:51:14.000+01:00",
-        "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-        "message": "Test the CI integration.",
-        "short_id": "0ff3ae19",
-        "title": "Test the CI integration."
-    },
-    "coverage": null,
-    "created_at": "2016-01-11T10:13:33.506Z",
-    "artifacts_file": null,
-    "finished_at": null,
-    "id": 69,
-    "name": "rubocop",
-    "ref": "master",
-    "runner": null,
-    "stage": "test",
-    "started_at": null,
-    "status": "pending",
-    "tag": false,
-    "user": null
+  "commit": {
+    "author_email": "admin@example.com",
+    "author_name": "Administrator",
+    "created_at": "2015-12-24T16:51:14.000+01:00",
+    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+    "message": "Test the CI integration.",
+    "short_id": "0ff3ae19",
+    "title": "Test the CI integration."
+  },
+  "coverage": null,
+  "created_at": "2016-01-11T10:13:33.506Z",
+  "artifacts_file": null,
+  "finished_at": null,
+  "id": 69,
+  "name": "rubocop",
+  "ref": "master",
+  "runner": null,
+  "stage": "test",
+  "started_at": null,
+  "status": "pending",
+  "tag": false,
+  "user": null
 }
 ```
 
@@ -419,34 +419,34 @@ Example of response
 
 ```json
 {
-    "commit": {
-        "author_email": "admin@example.com",
-        "author_name": "Administrator",
-        "created_at": "2015-12-24T16:51:14.000+01:00",
-        "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-        "message": "Test the CI integration.",
-        "short_id": "0ff3ae19",
-        "title": "Test the CI integration."
-    },
-    "coverage": null,
-    "download_url": null,
-    "id": 69,
-    "name": "rubocop",
-    "ref": "master",
-    "runner": null,
-    "stage": "test",
-    "created_at": "2016-01-11T10:13:33.506Z",
-    "started_at": "2016-01-11T10:13:33.506Z",
-    "finished_at": "2016-01-11T10:15:10.506Z",
-    "status": "failed",
-    "tag": false,
-    "user": null
+  "commit": {
+    "author_email": "admin@example.com",
+    "author_name": "Administrator",
+    "created_at": "2015-12-24T16:51:14.000+01:00",
+    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+    "message": "Test the CI integration.",
+    "short_id": "0ff3ae19",
+    "title": "Test the CI integration."
+  },
+  "coverage": null,
+  "download_url": null,
+  "id": 69,
+  "name": "rubocop",
+  "ref": "master",
+  "runner": null,
+  "stage": "test",
+  "created_at": "2016-01-11T10:13:33.506Z",
+  "started_at": "2016-01-11T10:13:33.506Z",
+  "finished_at": "2016-01-11T10:15:10.506Z",
+  "status": "failed",
+  "tag": false,
+  "user": null
 }
 ```
 
 ## Keep artifacts
 
-Prevents artifacts from being deleted when expiration is set
+Prevents artifacts from being deleted when expiration is set.
 
 ```
 POST /projects/:id/builds/:build_id/artifacts/keep
@@ -459,37 +459,37 @@ Parameters
 | `id`        | integer | yes      | The ID of a project |
 | `build_id`  | integer | yes      | The ID of a build   |
 
-Example of request
+Example request:
 
 ```
 curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/builds/1/artifacts/keep"
 ```
 
-Example of response
+Example response:
 
 ```json
 {
-    "commit": {
-        "author_email": "admin@example.com",
-        "author_name": "Administrator",
-        "created_at": "2015-12-24T16:51:14.000+01:00",
-        "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
-        "message": "Test the CI integration.",
-        "short_id": "0ff3ae19",
-        "title": "Test the CI integration."
-    },
-    "coverage": null,
-    "download_url": null,
-    "id": 69,
-    "name": "rubocop",
-    "ref": "master",
-    "runner": null,
-    "stage": "test",
-    "created_at": "2016-01-11T10:13:33.506Z",
-    "started_at": "2016-01-11T10:13:33.506Z",
-    "finished_at": "2016-01-11T10:15:10.506Z",
-    "status": "failed",
-    "tag": false,
-    "user": null
+  "commit": {
+    "author_email": "admin@example.com",
+    "author_name": "Administrator",
+    "created_at": "2015-12-24T16:51:14.000+01:00",
+    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+    "message": "Test the CI integration.",
+    "short_id": "0ff3ae19",
+    "title": "Test the CI integration."
+  },
+  "coverage": null,
+  "download_url": null,
+  "id": 69,
+  "name": "rubocop",
+  "ref": "master",
+  "runner": null,
+  "stage": "test",
+  "created_at": "2016-01-11T10:13:33.506Z",
+  "started_at": "2016-01-11T10:13:33.506Z",
+  "finished_at": "2016-01-11T10:15:10.506Z",
+  "status": "failed",
+  "tag": false,
+  "user": null
 }
 ```
diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index 704654e9e8c..644e5a2a99d 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -167,10 +167,11 @@ module API
                        user_can_download_artifacts: can?(current_user, :download_build_artifacts, user_project)
       end
 
-      # Keep the artifacts to prevent them to be deleted
+      # Keep the artifacts to prevent them from being deleted
       #
       # Parameters:
-      #   id (required) - The ID of a build
+      #   id (required) - the id of a project
+      #   build_id (required) - The ID of a build
       # Example Request:
       #   POST /projects/:id/builds/:build_id/artifacts/keep
       post ':id/builds/:build_id/artifacts/keep' do
diff --git a/lib/ci/api/entities.rb b/lib/ci/api/entities.rb
index 352d92e7cc0..3f5bdaba3f5 100644
--- a/lib/ci/api/entities.rb
+++ b/lib/ci/api/entities.rb
@@ -20,7 +20,7 @@ module Ci
         expose :name, :token, :stage
         expose :project_id
         expose :project_name
-        expose :artifacts_file, using: ArtifactFile, if: lambda { |build, opts| build.artifacts? }
+        expose :artifacts_file, using: ArtifactFile, if: ->(build, _) { build.artifacts? }
       end
 
       class BuildDetails < Build
@@ -29,7 +29,7 @@ module Ci
         expose :before_sha
         expose :allow_git_fetch
         expose :token
-        expose :artifacts_expire_at, if: lambda { |build, opts| build.artifacts? }
+        expose :artifacts_expire_at, if: ->(build, _) { build.artifacts? }
 
         expose :options do |model|
           model.options
diff --git a/spec/features/builds_spec.rb b/spec/features/builds_spec.rb
index a5c3f7cc0b0..0fd95295388 100644
--- a/spec/features/builds_spec.rb
+++ b/spec/features/builds_spec.rb
@@ -106,7 +106,7 @@ describe "Builds" do
       context 'no expire date defined' do
         let(:expire_at) { nil }
 
-        it 'should not have the Keep button' do
+        it 'does not have the Keep button' do
           page.within('.artifacts') do
             expect(page).not_to have_content 'Keep'
           end
@@ -116,7 +116,7 @@ describe "Builds" do
       context 'when expire date is defined' do
         let(:expire_at) { Time.now + 7.days }
 
-        it 'should keep artifacts when Keep button is clicked' do
+        it 'keeps artifacts when Keep button is clicked' do
           page.within('.artifacts') do
             expect(page).to have_content 'The artifacts will be removed'
             click_link 'Keep'
@@ -130,7 +130,7 @@ describe "Builds" do
       context 'when artifacts expired' do
         let(:expire_at) { Time.now - 7.days }
 
-        it 'should not have the Keep button' do
+        it 'does not have the Keep button' do
           page.within('.artifacts') do
             expect(page).to have_content 'The artifacts were removed'
             expect(page).not_to have_link 'Keep'
@@ -150,8 +150,6 @@ describe "Builds" do
         expect(page).to have_link 'Raw'
       end
     end
-
-    context ''
   end
 
   describe "POST /:project/builds/:id/cancel" do
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index a2e4639dbf7..f25b676651e 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -467,6 +467,7 @@ describe Ci::Build, models: true do
 
     it 'when assigning valid duration' do
       build.artifacts_expire_in = '7 days'
+
       is_expected.to be_within(10).of(7.days.to_i)
     end
 
@@ -477,6 +478,7 @@ describe Ci::Build, models: true do
 
     it 'when resseting value' do
       build.artifacts_expire_in = nil
+
       is_expected.to be_nil
     end
   end
@@ -486,6 +488,7 @@ describe Ci::Build, models: true do
 
     it 'to reset expire_at' do
       build.keep_artifacts!
+
       expect(build.artifacts_expire_at).to be_nil
     end
   end
diff --git a/spec/requests/api/builds_spec.rb b/spec/requests/api/builds_spec.rb
index b92d991b998..ac85f340922 100644
--- a/spec/requests/api/builds_spec.rb
+++ b/spec/requests/api/builds_spec.rb
@@ -253,17 +253,16 @@ describe API::API, api: true  do
                project: project, pipeline: pipeline, artifacts_expire_at: Time.now + 7.days)
       end
 
-      it 'should keep artifacts' do
+      it 'keeps artifacts' do
         expect(response.status).to eq 200
-        build.reload
-        expect(build.artifacts_expire_at).to be_nil
+        expect(build.reload.artifacts_expire_at).to be_nil
       end
     end
 
     context 'no artifacts' do
       let(:build) { create(:ci_build, project: project, pipeline: pipeline) }
 
-      it 'should respond with not found' do
+      it 'responds with not found' do
         expect(response.status).to eq 404
       end
     end
diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb
index dd2ade368f1..616b41eabe0 100644
--- a/spec/requests/ci/api/builds_spec.rb
+++ b/spec/requests/ci/api/builds_spec.rb
@@ -364,7 +364,7 @@ describe Ci::API::API do
             end
           end
 
-          context 'expire date' do
+          context 'with an expire date' do
             let!(:artifacts) { file_upload }
 
             let(:post_data) do
@@ -377,7 +377,7 @@ describe Ci::API::API do
               post(post_url, post_data, headers_with_token)
             end
 
-            context 'updates when specified' do
+            context 'with an expire_in given' do
               let(:expire_in) { '7 days' }
 
               it do
@@ -388,7 +388,7 @@ describe Ci::API::API do
               end
             end
 
-            context 'ignores if not specified' do
+            context 'with no expire_in given' do
               let(:expire_in) { nil }
 
               it do
diff --git a/spec/workers/expire_build_artifacts_worker_spec.rb b/spec/workers/expire_build_artifacts_worker_spec.rb
index 64a55e8c587..501ca630e55 100644
--- a/spec/workers/expire_build_artifacts_worker_spec.rb
+++ b/spec/workers/expire_build_artifacts_worker_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe ExpireBuildArtifactsWorker do
   include RepoHelpers
 
-  let(:worker) { ExpireBuildArtifactsWorker.new }
+  let(:worker) { described_class.new }
 
   describe '#perform' do
     context 'with expired artifacts' do
@@ -11,9 +11,10 @@ describe ExpireBuildArtifactsWorker do
 
       it do
         expect_any_instance_of(Ci::Build).to receive(:erase_artifacts!)
+
         worker.perform
-        build.reload
-        expect(build.artifacts_expired?).to be_truthy
+
+        expect(build.reload.artifacts_expired?).to be_truthy
       end
     end
 
@@ -22,9 +23,10 @@ describe ExpireBuildArtifactsWorker do
 
       it do
         expect_any_instance_of(Ci::Build).not_to receive(:erase_artifacts!)
+
         worker.perform
-        build.reload
-        expect(build.artifacts_expired?).to be_falsey
+
+        expect(build.reload.artifacts_expired?).to be_falsey
       end
     end
 
@@ -33,6 +35,7 @@ describe ExpireBuildArtifactsWorker do
 
       it do
         expect_any_instance_of(Ci::Build).not_to receive(:erase_artifacts!)
+
         worker.perform
       end
     end
@@ -47,9 +50,10 @@ describe ExpireBuildArtifactsWorker do
 
       it do
         expect_any_instance_of(Ci::Build).not_to receive(:erase_artifacts!)
+
         worker.perform
-        build.reload
-        expect(build.artifacts_expired?).to be_truthy
+
+        expect(build.reload.artifacts_expired?).to be_truthy
       end
     end
   end
-- 
GitLab