s3_relay 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -19
  3. data/app/assets/javascripts/s3_relay.coffee +4 -4
  4. data/app/controllers/s3_relay/uploads_controller.rb +8 -2
  5. data/app/models/s3_relay/upload.rb +1 -1
  6. data/db/migrate/20141009000804_create_s3_relay_uploads.rb +1 -1
  7. data/lib/s3_relay/base.rb +1 -1
  8. data/lib/s3_relay/engine.rb +1 -1
  9. data/lib/s3_relay/private_url.rb +1 -1
  10. data/lib/s3_relay/version.rb +1 -1
  11. data/test/controllers/s3_relay/uploads_controller_test.rb +28 -22
  12. data/test/dummy/{README.rdoc → README.md} +1 -5
  13. data/test/dummy/Rakefile +1 -1
  14. data/test/dummy/app/assets/config/manifest.js +3 -0
  15. data/test/dummy/app/assets/javascripts/application.js +6 -4
  16. data/test/dummy/app/assets/javascripts/cable.js +13 -0
  17. data/test/dummy/app/assets/stylesheets/application.css +5 -5
  18. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  19. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  20. data/test/dummy/app/controllers/application_controller.rb +0 -2
  21. data/test/dummy/app/jobs/application_job.rb +2 -0
  22. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  23. data/test/dummy/app/models/application_record.rb +3 -0
  24. data/test/dummy/app/models/product.rb +1 -1
  25. data/test/dummy/app/views/layouts/application.html.erb +9 -9
  26. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  27. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  28. data/test/dummy/bin/rails +6 -1
  29. data/test/dummy/bin/rake +5 -0
  30. data/test/dummy/bin/setup +38 -0
  31. data/test/dummy/bin/spring +17 -0
  32. data/test/dummy/bin/update +29 -0
  33. data/test/dummy/bin/yarn +11 -0
  34. data/test/dummy/config.ru +2 -1
  35. data/test/dummy/config/application.rb +7 -11
  36. data/test/dummy/config/boot.rb +2 -4
  37. data/test/dummy/config/cable.yml +10 -0
  38. data/test/dummy/config/environment.rb +1 -1
  39. data/test/dummy/config/environments/development.rb +24 -7
  40. data/test/dummy/config/environments/production.rb +36 -23
  41. data/test/dummy/config/environments/test.rb +6 -3
  42. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  43. data/test/dummy/config/initializers/assets.rb +8 -2
  44. data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
  45. data/test/dummy/config/initializers/wrap_parameters.rb +2 -2
  46. data/test/dummy/config/locales/en.yml +10 -0
  47. data/test/dummy/config/puma.rb +56 -0
  48. data/test/dummy/config/secrets.yml +15 -5
  49. data/test/dummy/config/spring.rb +6 -0
  50. data/test/dummy/db/migrate/20141021002149_create_products.rb +1 -1
  51. data/test/dummy/db/schema.rb +13 -14
  52. data/test/dummy/db/seeds.rb +7 -0
  53. data/test/dummy/log/development.log +60 -20
  54. data/test/dummy/log/test.log +10958 -856
  55. data/test/dummy/package.json +5 -0
  56. data/test/dummy/public/404.html +6 -6
  57. data/test/dummy/public/422.html +6 -6
  58. data/test/dummy/public/500.html +6 -6
  59. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  60. data/test/dummy/public/apple-touch-icon.png +0 -0
  61. data/test/dummy/public/robots.txt +1 -0
  62. data/test/dummy/test/application_system_test_case.rb +5 -0
  63. data/test/dummy/test/test_helper.rb +9 -0
  64. data/test/factories/products.rb +2 -2
  65. data/test/factories/uploads.rb +14 -7
  66. data/test/helpers/s3_relay/uploads_helper_test.rb +7 -4
  67. data/test/lib/s3_relay/model_test.rb +15 -15
  68. data/test/lib/s3_relay/private_url_test.rb +1 -1
  69. data/test/lib/s3_relay/upload_presigner_test.rb +9 -9
  70. data/test/models/s3_relay/upload_test.rb +25 -24
  71. data/test/test_helper.rb +2 -4
  72. metadata +110 -72
  73. data/test/dummy/config/initializers/session_store.rb +0 -3
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "dummy",
3
+ "private": true,
4
+ "dependencies": {}
5
+ }
@@ -4,7 +4,7 @@
4
4
  <title>The page you were looking for doesn't exist (404)</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <style>
7
- body {
7
+ .rails-default-error-page {
8
8
  background-color: #EFEFEF;
9
9
  color: #2E2F30;
10
10
  text-align: center;
@@ -12,13 +12,13 @@
12
12
  margin: 0;
13
13
  }
14
14
 
15
- div.dialog {
15
+ .rails-default-error-page div.dialog {
16
16
  width: 95%;
17
17
  max-width: 33em;
18
18
  margin: 4em auto 0;
19
19
  }
20
20
 
21
- div.dialog > div {
21
+ .rails-default-error-page div.dialog > div {
22
22
  border: 1px solid #CCC;
23
23
  border-right-color: #999;
24
24
  border-left-color: #999;
@@ -31,13 +31,13 @@
31
31
  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
32
  }
33
33
 
34
- h1 {
34
+ .rails-default-error-page h1 {
35
35
  font-size: 100%;
36
36
  color: #730E15;
37
37
  line-height: 1.5em;
38
38
  }
39
39
 
40
- div.dialog > p {
40
+ .rails-default-error-page div.dialog > p {
41
41
  margin: 0 0 1em;
42
42
  padding: 1em;
43
43
  background-color: #F7F7F7;
@@ -54,7 +54,7 @@
54
54
  </style>
55
55
  </head>
56
56
 
57
- <body>
57
+ <body class="rails-default-error-page">
58
58
  <!-- This file lives in public/404.html -->
59
59
  <div class="dialog">
60
60
  <div>
@@ -4,7 +4,7 @@
4
4
  <title>The change you wanted was rejected (422)</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <style>
7
- body {
7
+ .rails-default-error-page {
8
8
  background-color: #EFEFEF;
9
9
  color: #2E2F30;
10
10
  text-align: center;
@@ -12,13 +12,13 @@
12
12
  margin: 0;
13
13
  }
14
14
 
15
- div.dialog {
15
+ .rails-default-error-page div.dialog {
16
16
  width: 95%;
17
17
  max-width: 33em;
18
18
  margin: 4em auto 0;
19
19
  }
20
20
 
21
- div.dialog > div {
21
+ .rails-default-error-page div.dialog > div {
22
22
  border: 1px solid #CCC;
23
23
  border-right-color: #999;
24
24
  border-left-color: #999;
@@ -31,13 +31,13 @@
31
31
  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
32
  }
33
33
 
34
- h1 {
34
+ .rails-default-error-page h1 {
35
35
  font-size: 100%;
36
36
  color: #730E15;
37
37
  line-height: 1.5em;
38
38
  }
39
39
 
40
- div.dialog > p {
40
+ .rails-default-error-page div.dialog > p {
41
41
  margin: 0 0 1em;
42
42
  padding: 1em;
43
43
  background-color: #F7F7F7;
@@ -54,7 +54,7 @@
54
54
  </style>
55
55
  </head>
56
56
 
57
- <body>
57
+ <body class="rails-default-error-page">
58
58
  <!-- This file lives in public/422.html -->
59
59
  <div class="dialog">
60
60
  <div>
@@ -4,7 +4,7 @@
4
4
  <title>We're sorry, but something went wrong (500)</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <style>
7
- body {
7
+ .rails-default-error-page {
8
8
  background-color: #EFEFEF;
9
9
  color: #2E2F30;
10
10
  text-align: center;
@@ -12,13 +12,13 @@
12
12
  margin: 0;
13
13
  }
14
14
 
15
- div.dialog {
15
+ .rails-default-error-page div.dialog {
16
16
  width: 95%;
17
17
  max-width: 33em;
18
18
  margin: 4em auto 0;
19
19
  }
20
20
 
21
- div.dialog > div {
21
+ .rails-default-error-page div.dialog > div {
22
22
  border: 1px solid #CCC;
23
23
  border-right-color: #999;
24
24
  border-left-color: #999;
@@ -31,13 +31,13 @@
31
31
  box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
32
  }
33
33
 
34
- h1 {
34
+ .rails-default-error-page h1 {
35
35
  font-size: 100%;
36
36
  color: #730E15;
37
37
  line-height: 1.5em;
38
38
  }
39
39
 
40
- div.dialog > p {
40
+ .rails-default-error-page div.dialog > p {
41
41
  margin: 0 0 1em;
42
42
  padding: 1em;
43
43
  background-color: #F7F7F7;
@@ -54,7 +54,7 @@
54
54
  </style>
55
55
  </head>
56
56
 
57
- <body>
57
+ <body class="rails-default-error-page">
58
58
  <!-- This file lives in public/500.html -->
59
59
  <div class="dialog">
60
60
  <div>
File without changes
@@ -0,0 +1 @@
1
+ # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
@@ -0,0 +1,5 @@
1
+ require "test_helper"
2
+
3
+ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4
+ driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
5
+ end
@@ -0,0 +1,9 @@
1
+ require File.expand_path('../../config/environment', __FILE__)
2
+ require 'rails/test_help'
3
+
4
+ class ActiveSupport::TestCase
5
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
6
+ fixtures :all
7
+
8
+ # Add more helper methods to be used by all tests here...
9
+ end
@@ -1,5 +1,5 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :product do
3
- name "Flux Capacitor"
3
+ name { "Flux Capacitor" }
4
4
  end
5
5
  end
@@ -1,16 +1,23 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
  factory :upload, class: "S3Relay::Upload" do
3
- uuid SecureRandom.uuid
4
- filename "cat.png"
5
- content_type "image/png"
6
- upload_type "FileUpload"
3
+ uuid { SecureRandom.uuid }
4
+ end
5
+
6
+ factory :file_upload, parent: :upload do
7
+ filename { "cat.png" }
8
+ content_type { "image/png" }
9
+ upload_type { "FileUpload" }
7
10
  end
8
11
 
9
12
  factory :icon_upload, parent: :upload do
10
- upload_type "IconUpload"
13
+ filename { "cat.png" }
14
+ content_type { "image/png" }
15
+ upload_type { "IconUpload" }
11
16
  end
12
17
 
13
18
  factory :photo_upload, parent: :upload do
14
- upload_type "PhotoUpload"
19
+ filename { "cat.png" }
20
+ content_type { "image/png" }
21
+ upload_type { "PhotoUpload" }
15
22
  end
16
23
  end
@@ -1,27 +1,30 @@
1
1
  require "test_helper"
2
2
 
3
+ include ActionView::Helpers::FormTagHelper
4
+ include S3Relay::UploadsHelper
5
+
3
6
  describe S3Relay::UploadsHelper do
4
- before { @product = FactoryGirl.create(:product) }
7
+ before { @product = FactoryBot.create(:product) }
5
8
 
6
9
  describe "#s3_relay_field" do
7
10
  describe "without options" do
8
11
  it do
9
12
  s3_relay_field(@product, :photo_uploads)
10
- .must_equal %Q{<div class="s3r-container" data-association="photo_uploads" data-disposition=\"inline\" data-parent-id="#{@product.id}" data-parent-type="product"><input class="s3r-field" id="file" name="file" type="file" /><table class="s3r-upload-list"></table></div>}
13
+ .must_equal %Q{<div class="s3r-container" data-parent-type="product" data-parent-id="#{@product.id}" data-association="photo_uploads" data-disposition=\"inline\"><input type="file" name="file" id="file" class="s3r-field" /><table class="s3r-upload-list"></table></div>}
11
14
  end
12
15
  end
13
16
 
14
17
  describe "with multiple: true" do
15
18
  it do
16
19
  s3_relay_field(@product, :photo_uploads, multiple: true)
17
- .must_equal %Q{<div class="s3r-container" data-association="photo_uploads" data-disposition=\"inline\" data-parent-id="#{@product.id}" data-parent-type="product"><input class="s3r-field" id="file" multiple="multiple" name="file" type="file" /><table class="s3r-upload-list"></table></div>}
20
+ .must_equal %Q{<div class="s3r-container" data-parent-type="product" data-parent-id="#{@product.id}" data-association="photo_uploads" data-disposition=\"inline\"><input type="file" name="file" id="file" multiple="multiple" class="s3r-field" /><table class="s3r-upload-list"></table></div>}
18
21
  end
19
22
  end
20
23
 
21
24
  describe "with disposition: attachment" do
22
25
  it do
23
26
  s3_relay_field(@product, :photo_uploads, disposition: :attachment)
24
- .must_equal %Q{<div class="s3r-container" data-association="photo_uploads" data-disposition=\"attachment\" data-parent-id="#{@product.id}" data-parent-type="product"><input class="s3r-field" disposition=\"attachment\" id="file" name="file" type="file" /><table class="s3r-upload-list"></table></div>}
27
+ .must_equal %Q{<div class="s3r-container" data-parent-type="product" data-parent-id="#{@product.id}" data-association="photo_uploads" data-disposition=\"attachment\"><input type="file" name="file" id="file" disposition=\"attachment\" class="s3r-field" /><table class="s3r-upload-list"></table></div>}
25
28
  end
26
29
  end
27
30
  end
@@ -2,19 +2,19 @@ require "test_helper"
2
2
 
3
3
  describe S3Relay::Model do
4
4
  before do
5
- @product = FactoryGirl.build(:product)
5
+ @product = FactoryBot.build(:product)
6
6
  end
7
7
 
8
8
  describe "#s3_relay" do
9
9
 
10
10
  describe "associations" do
11
11
  it "has_one" do
12
- Product.reflect_on_association(:icon_upload).macro
12
+ _(Product.reflect_on_association(:icon_upload).macro)
13
13
  .must_equal(:has_one)
14
14
  end
15
15
 
16
16
  it "has_many" do
17
- Product.reflect_on_association(:photo_uploads).macro
17
+ _(Product.reflect_on_association(:photo_uploads).macro)
18
18
  .must_equal(:has_many)
19
19
  end
20
20
  end
@@ -22,41 +22,41 @@ describe S3Relay::Model do
22
22
  describe "scopes" do
23
23
  before do
24
24
  @product.save
25
- @icon = FactoryGirl.create(:icon_upload, parent: @product)
26
- @photo_1 = FactoryGirl.create(:photo_upload, parent: @product)
27
- @photo_2 = FactoryGirl.create(:photo_upload, parent: @product)
25
+ @icon = FactoryBot.create(:icon_upload, parent: @product)
26
+ @photo_1 = FactoryBot.create(:photo_upload, parent: @product)
27
+ @photo_2 = FactoryBot.create(:photo_upload, parent: @product)
28
28
  end
29
29
 
30
30
  describe "has_one" do
31
- it { @product.icon_upload.must_equal @icon }
31
+ it { _(@product.icon_upload).must_equal @icon }
32
32
  end
33
33
 
34
34
  describe "has_many" do
35
35
  it do
36
- @product.photo_uploads.pluck(:id).sort
36
+ _(@product.photo_uploads.pluck(:id).sort)
37
37
  .must_equal [@photo_1.id, @photo_2.id]
38
38
  end
39
39
  end
40
40
  end
41
41
 
42
42
  describe "virtual attribute for UUID assignment" do
43
- it { @product.must_respond_to :new_photo_uploads_uuids= }
43
+ it { _(@product).must_respond_to :new_photo_uploads_uuids= }
44
44
  end
45
45
 
46
46
  describe "association method" do
47
47
  before do
48
- @product = FactoryGirl.create(:product)
49
- @icon = FactoryGirl.create(:icon_upload)
50
- @photo_1 = FactoryGirl.create(:photo_upload)
51
- @photo_2 = FactoryGirl.create(:photo_upload)
48
+ @product = FactoryBot.create(:product)
49
+ @icon = FactoryBot.create(:icon_upload)
50
+ @photo_1 = FactoryBot.create(:photo_upload)
51
+ @photo_2 = FactoryBot.create(:photo_upload)
52
52
  end
53
53
 
54
54
  describe "has_many" do
55
55
  it do
56
- @product.photo_uploads.must_equal []
56
+ _(@product.photo_uploads).must_equal []
57
57
  @product.new_photo_uploads_uuids = [@photo_1.uuid, @photo_2.uuid]
58
58
  @product.associate_photo_uploads
59
- @product.photo_uploads.must_equal [@photo_1, @photo_2]
59
+ _(@product.photo_uploads).must_equal [@photo_1, @photo_2]
60
60
  end
61
61
  end
62
62
  end
@@ -21,7 +21,7 @@ describe S3Relay::PrivateUrl do
21
21
  time = Time.parse("2014-01-01 12:00am")
22
22
  url = S3Relay::PrivateUrl.new(uuid, file, expires: time).generate
23
23
 
24
- url.must_equal "https://bucket.s3-region.amazonaws.com/123-456-789/Crazy%20%2B%20c@t%20picture.png?AWSAccessKeyId=access-key-id&Expires=1388563200&Signature=8Kp5NL77iycg4CFFwxboo905t%2Fs%3D"
24
+ _(url).must_equal "https://s3.region.amazonaws.com/bucket/123-456-789/Crazy%20%2B%20c@t%20picture.png?AWSAccessKeyId=access-key-id&Expires=1388563200&Signature=8Kp5NL77iycg4CFFwxboo905t%2Fs%3D"
25
25
  end
26
26
  end
27
27
 
@@ -23,15 +23,15 @@ describe S3Relay::UploadPresigner do
23
23
 
24
24
  data = S3Relay::UploadPresigner.new(expires: time).form_data
25
25
 
26
- data["awsaccesskeyid"].must_equal "access-key-id"
27
- data["x_amz_server_side_encryption"].must_equal "AES256"
28
- data["key"].must_equal "#{uuid}/${filename}"
29
- data["success_action_status"].must_equal "201"
30
- data["acl"].must_equal "acl"
31
- data["endpoint"].must_equal "https://bucket.s3-region.amazonaws.com"
32
- data["policy"].length.must_equal 400 # TODO: Improve this
33
- data["signature"].length.must_equal 28 # TODO: Improve this
34
- data["uuid"].must_equal uuid
26
+ _(data["awsaccesskeyid"]).must_equal "access-key-id"
27
+ _(data["x_amz_server_side_encryption"]).must_equal "AES256"
28
+ _(data["key"]).must_equal "#{uuid}/${filename}"
29
+ _(data["success_action_status"]).must_equal "201"
30
+ _(data["acl"]).must_equal "acl"
31
+ _(data["endpoint"]).must_equal "https://s3.region.amazonaws.com/bucket"
32
+ _(data["policy"].length).must_equal 400 # TODO: Improve this
33
+ _(data["signature"].length).must_equal 28 # TODO: Improve this
34
+ _(data["uuid"]).must_equal uuid
35
35
  end
36
36
  end
37
37
 
@@ -2,13 +2,13 @@ require "test_helper"
2
2
 
3
3
  describe S3Relay::Upload do
4
4
  before do
5
- @upload = S3Relay::Upload.new
5
+ @upload = FactoryBot.build(:upload)
6
6
  end
7
7
 
8
8
  describe "associations" do
9
9
  describe "parent" do
10
10
  it do
11
- S3Relay::Upload.reflect_on_association(:parent).macro
11
+ _(S3Relay::Upload.reflect_on_association(:parent).macro)
12
12
  .must_equal :belongs_to
13
13
  end
14
14
  end
@@ -17,35 +17,36 @@ describe S3Relay::Upload do
17
17
  describe "validations" do
18
18
  describe "uuid" do
19
19
  it "validates presence" do
20
+ @upload.uuid = nil
20
21
  @upload.valid?
21
- @upload.errors[:uuid].must_include("can't be blank")
22
+ _(@upload.errors[:uuid]).must_include("can't be blank")
22
23
  end
23
24
 
24
25
  it "validates uniqueness" do
25
- S3Relay::Upload.new(uuid: @upload.uuid).save!(validate: false)
26
+ FactoryBot.create(:file_upload, uuid: @upload.uuid)
26
27
  @upload.valid?
27
- @upload.errors[:uuid].must_include("has already been taken")
28
+ _(@upload.errors[:uuid]).must_include("has already been taken")
28
29
  end
29
30
  end
30
31
 
31
32
  describe "upload_type" do
32
33
  it "validates presence" do
33
34
  @upload.valid?
34
- @upload.errors[:upload_type].must_include("can't be blank")
35
+ _(@upload.errors[:upload_type]).must_include("can't be blank")
35
36
  end
36
37
  end
37
38
 
38
39
  describe "filename" do
39
40
  it "validates presence" do
40
41
  @upload.valid?
41
- @upload.errors[:filename].must_include("can't be blank")
42
+ _(@upload.errors[:filename]).must_include("can't be blank")
42
43
  end
43
44
  end
44
45
 
45
46
  describe "content_type" do
46
47
  it "validates presence" do
47
48
  @upload.valid?
48
- @upload.errors[:content_type].must_include("can't be blank")
49
+ _(@upload.errors[:content_type]).must_include("can't be blank")
49
50
  end
50
51
  end
51
52
 
@@ -53,68 +54,68 @@ describe S3Relay::Upload do
53
54
  it "validates presence" do
54
55
  @upload.pending_at = nil
55
56
  @upload.valid?
56
- @upload.errors[:pending_at].must_include("can't be blank")
57
+ _(@upload.errors[:pending_at]).must_include("can't be blank")
57
58
  end
58
59
  end
59
60
  end
60
61
 
61
62
  describe "scopes" do
62
63
  before do
63
- @pending = S3Relay::Upload.new
64
+ @pending = FactoryBot.build(:file_upload)
64
65
  .tap { |u| u.save(validate: false) }
65
- @imported = S3Relay::Upload.new(state: "imported")
66
+ @imported = FactoryBot.build(:upload, state: "imported")
66
67
  .tap { |u| u.save(validate: false) }
67
68
  end
68
69
 
69
70
  describe "pending" do
70
71
  it do
71
72
  results = S3Relay::Upload.pending.all
72
- results.must_include @pending
73
- results.wont_include @imported
73
+ _(results).must_include @pending
74
+ _(results).wont_include @imported
74
75
  end
75
76
  end
76
77
 
77
78
  describe "imported" do
78
79
  it do
79
80
  results = S3Relay::Upload.imported.all
80
- results.wont_include @pending
81
- results.must_include @imported
81
+ _(results).wont_include @pending
82
+ _(results).must_include @imported
82
83
  end
83
84
  end
84
85
  end
85
86
 
86
87
  describe "upon finalization" do
87
88
  it do
88
- @upload.state.must_equal "pending"
89
- @upload.pending_at.wont_equal nil
89
+ _(@upload.state).must_equal "pending"
90
+ _(@upload.pending_at).wont_equal nil
90
91
  end
91
92
  end
92
93
 
93
94
  describe "#pending?" do
94
- it { @upload.pending?.must_equal true }
95
+ it { _(@upload.pending?).must_equal true }
95
96
  end
96
97
 
97
98
  describe "#imported" do
98
99
  it do
99
100
  @upload.state = "imported"
100
- @upload.imported?.must_equal true
101
+ _(@upload.imported?).must_equal true
101
102
  end
102
103
  end
103
104
 
104
105
  describe "#mark_imported!" do
105
106
  it do
106
107
  @upload.mark_imported!
107
- @upload.state.must_equal "imported"
108
- @upload.imported_at.wont_equal nil
108
+ _(@upload.state).must_equal "imported"
109
+ _(@upload.imported_at).wont_equal nil
109
110
  end
110
111
  end
111
112
 
112
113
  describe "#notify_parent" do
113
- before { @upload = FactoryGirl.build(:upload) }
114
+ before { @upload = FactoryBot.build(:file_upload) }
114
115
 
115
116
  describe "when the parent is associated" do
116
117
  it do
117
- @product = FactoryGirl.create(:product)
118
+ @product = FactoryBot.create(:product)
118
119
  @upload.parent = @product
119
120
  @product.expects(:import_upload)
120
121
  @upload.save
@@ -134,7 +135,7 @@ describe S3Relay::Upload do
134
135
  S3Relay::PrivateUrl.expects(:new).with(uuid, filename).returns(klass)
135
136
  klass.expects(:generate).returns(url)
136
137
 
137
- @upload.private_url.must_equal url
138
+ _(@upload.private_url).must_equal url
138
139
  end
139
140
  end
140
141