diff --git a/.env.sample b/.env.sample index c506d1a..578cac9 100644 --- a/.env.sample +++ b/.env.sample @@ -7,8 +7,6 @@ AWS_SECRET_ACCESS_KEY= AWS_REGION= BRAYNIAC_AI_API_ENDPOINT=https://z99cprg2eg.execute-api.us-east-1.amazonaws.com/dev/v0.0.1 -SOURCE_AUDIO_API_ENDPOINT=https://bigmedia.sourceaudio.com/api -SOURCE_AUDIO_TOKEN= # Optional REDIS_URL= @@ -16,7 +14,6 @@ REDIS_URL= # Required for Zoom.us integration ZOOM_API_KEY= ZOOM_API_SECRET= -ZOOM_ACCOUNT_NUMBER= ZOOM_PRO_USERS_LIMIT= # defaults to 3 ZOOM_USER_TYPE= # 'pro' / 'basic' ZOOM_ENABLE_RECORDINGS= # true / false (default: false) @@ -28,3 +25,7 @@ MUX_TOKEN_ID= MUX_TOKEN_SECRET= MUX_BROADCAST_SERVER_URL=rtmp://global-live.mux.com:5222/app MUX_TEST_MODE_DISABLED= + +# Required for creating user through API +CUSTOM_API_TOKEN= + diff --git a/app/controllers/api/user_token_controller.rb b/app/controllers/api/user_token_controller.rb index c9ab895..cae81f9 100644 --- a/app/controllers/api/user_token_controller.rb +++ b/app/controllers/api/user_token_controller.rb @@ -1,5 +1,12 @@ +# frozen_string_literal: true + +require './lib/knock_monkeypatch' + class Api::UserTokenController < Knock::AuthTokenController + include Oath::ControllerHelpers + skip_before_action :verify_authenticity_token + before_action :sign_in_user rescue_from Exception, :with => :return_error @@ -10,7 +17,7 @@ class Api::UserTokenController < Knock::AuthTokenController logger.error "==Handled=======" logger.error exception.message logger.error exception.backtrace.join("\n") - logger.error "==Handled=======" + logger.error "==Handled=======" case exception when ActiveRecord::RecordNotFound @status = 404 @@ -27,12 +34,18 @@ class Api::UserTokenController < Knock::AuthTokenController end # for some reason render json_errors is not working - # simulating JSON API support - render json: { + # simulating JSON API support + render json: { errors: [{ status: @status.to_s, title: @message }] } end + + private + + def sign_in_user + sign_in(entity) + end end diff --git a/app/controllers/api/users_controller.rb b/app/controllers/api/users_controller.rb new file mode 100644 index 0000000..1af1d76 --- /dev/null +++ b/app/controllers/api/users_controller.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class Api::UsersController < Api::ApiController + skip_before_action :authenticate_user + before_action :verify_custom_token, only: :create + + def create + if user_params[:email].nil? || user_params[:password].nil? + raise ActionController::ParameterMissing.new 'Missing email or password' + end + + user = Oath::Services::SignUp.new(user_params).perform + render json: user.slice(:email, :created_at, :first_name, :last_name) + end + + private + + def user_params + params.require(:user).permit(%i[ + email + password + first_name + last_name + ]) + end + + def verify_custom_token + if token.blank? || token != ENV['CUSTOM_API_TOKEN'] + unauthorized_entity(:user) + end + end + +end diff --git a/app/models/account.rb b/app/models/account.rb index 6c89d62..b2f0a60 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -64,6 +64,19 @@ class Account < ApplicationRecord ])).sum(:byte_size).to_f end + def total_number_of_releases + [ + MiscRelease.where(project: projects).size, + AppearanceRelease.where(project: projects).size, + TalentRelease.where(project: projects).size, + MaterialRelease.where(project: projects).size, + MedicalRelease.where(project: projects).size, + LocationRelease.where(project: projects).size, + AcquiredMediaRelease.where(project: projects).size, + MusicRelease.where(project: projects).size + ].sum + end + def to_param slug end @@ -85,7 +98,7 @@ class Account < ApplicationRecord end def taskme_enabled? - ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme") + plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme" end def plan_name diff --git a/app/views/account_auths/_account_logo_form.html.erb b/app/views/account_auths/_account_logo_form.html.erb index c593522..33af982 100644 --- a/app/views/account_auths/_account_logo_form.html.erb +++ b/app/views/account_auths/_account_logo_form.html.erb @@ -1,4 +1,4 @@ <%= bootstrap_form_with model: account, url: account_path, html: { autocorrect: :off, autocapitalize: :none, autocomplete: :off, spellcheck: false }, layout: :inline, remote: true do |form| %> - <%= form.file_field :logo, hide_label: true, accept: "image/*", placeholder: "Upload Logo", direct_upload: true, wrapper_class: "mr-1" %> + <%= form.file_field :logo, hide_label: true, accept: "image/*", placeholder: "Upload Logo", direct_upload: true, wrapper_class: "mr-1", required: true %> <%= form.button(fa_icon("upload", text: t(".submit")), class: "btn btn-md btn-primary", data: { disable_with: t("shared.disable_with") }) %> <% end %> diff --git a/app/views/acquired_media_releases/_acquired_media_release.html.erb b/app/views/acquired_media_releases/_acquired_media_release.html.erb index 2ebcc67..ab0f400 100644 --- a/app/views/acquired_media_releases/_acquired_media_release.html.erb +++ b/app/views/acquired_media_releases/_acquired_media_release.html.erb @@ -18,6 +18,9 @@ <%= fa_icon("warning", text: t(".no_media"), class: "text-danger") %> <% end %> + + <%= contact_info_for(acquired_media_release.contact_person) %> + <%= notes_preview acquired_media_release.notes.order_by_recent %> diff --git a/app/views/acquired_media_releases/index.html.erb b/app/views/acquired_media_releases/index.html.erb index 3bbc09c..38c41dd 100644 --- a/app/views/acquired_media_releases/index.html.erb +++ b/app/views/acquired_media_releases/index.html.erb @@ -29,6 +29,7 @@ <%= t '.table_headers.approved'%> <%= AcquiredMediaRelease.human_attribute_name(:name) %> <%= t(".table_headers.file_infos_count") %> + <%= t(".table_headers.owner_info") %> <%= t(".table_headers.notes") %> <%= t(".table_headers.tags") %> <%= t(".table_headers.signed_at") %> diff --git a/app/views/admin/accounts/show.html.erb b/app/views/admin/accounts/show.html.erb index 48b21ed..f900f9d 100644 --- a/app/views/admin/accounts/show.html.erb +++ b/app/views/admin/accounts/show.html.erb @@ -9,6 +9,8 @@
<%= @account.users.size %>
Created at
<%= time_ago_in_words(@account.created_at) %> ago
+
# of Releases
+
<%= @account.total_number_of_releases %>
<% end %> diff --git a/app/views/broadcasts/_video.html.erb b/app/views/broadcasts/_video.html.erb index ff88436..e0e9ad2 100644 --- a/app/views/broadcasts/_video.html.erb +++ b/app/views/broadcasts/_video.html.erb @@ -1,9 +1,9 @@ -<% if broadcast.streamer_recording? && broadcast.active? %> -
-<% elsif broadcast.director_mode_video_embed.present? && params[:director_mode] == "true" %> +<% if broadcast.director_mode_video_embed.present? && params[:director_mode].present? %>
<%= raw broadcast.director_mode_video_embed %>
+<% elsif broadcast.streamer_recording? && broadcast.active? %> +
<% else %>
diff --git a/app/views/layouts/admin/application.html.erb b/app/views/layouts/admin/application.html.erb index a12ee6a..1ab88e9 100644 --- a/app/views/layouts/admin/application.html.erb +++ b/app/views/layouts/admin/application.html.erb @@ -1,7 +1,7 @@ - BiGMedia.ai App + MESuite.ai App <%= csrf_meta_tags %> <%= csp_meta_tag %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 5bee701..b2e5751 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,7 +1,7 @@ - BiGMedia.ai App + MESuite.ai App <%= csrf_meta_tags %> <%= csp_meta_tag %> diff --git a/app/views/material_releases/_material_release.html.erb b/app/views/material_releases/_material_release.html.erb index 1db1c17..44c1b00 100644 --- a/app/views/material_releases/_material_release.html.erb +++ b/app/views/material_releases/_material_release.html.erb @@ -18,6 +18,9 @@ + diff --git a/app/views/material_releases/index.html.erb b/app/views/material_releases/index.html.erb index bca39db..eaf63df 100644 --- a/app/views/material_releases/index.html.erb +++ b/app/views/material_releases/index.html.erb @@ -29,10 +29,10 @@ + - - + diff --git a/app/views/task_requests/splash.html.erb b/app/views/task_requests/splash.html.erb index 98d626f..206c74d 100644 --- a/app/views/task_requests/splash.html.erb +++ b/app/views/task_requests/splash.html.erb @@ -18,15 +18,7 @@
-
<%= material_release.name %> + <%= contact_info_for(material_release.contact_person) %> + <%= notes_preview material_release.notes.order_by_recent %> <%= t '.table_headers.approved'%> <%= MaterialRelease.human_attribute_name(:name) %><%= t(".table_headers.owner_info") %> <%= t(".table_headers.notes") %> <%= t(".table_headers.tags") %><%= t(".table_headers.signed_at") %><%= t(".table_headers.signed_at") %>
- - - - - -
- Video tutorial will be available soon -
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index 77285d3..fd67d6c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -67,6 +67,7 @@ en: notes: Notes signed_at: Date Signed tags: Tags + owner_info: Owner Info new: heading: Import Acquired Media Release update: @@ -518,6 +519,8 @@ en: person_last_name: Last name person_name: Name person_phone: Phone number + contract_template: + amendment_clause: Additional Contract Clause location_release: address_city: City address_country: Country @@ -848,7 +851,8 @@ en: search: Search empty: Location Releases will appear here table_headers: - amendment_signed: Amendment + address: Address + amendment_signed: Additional Clause approved: Approved location_info: Location Info notes: Notes @@ -859,7 +863,7 @@ en: actions: manage: Manage review: Review - sign_amendment: Sign Amendment + sign_amendment: Sign Additional Clause messages: amendment_not_signed_tooltip: Amendment not yet signed amendment_signed_tooltip: Amendment Signed @@ -903,6 +907,7 @@ en: approved: Approved name: Name notes: Notes + owner_info: Owner Info signed_at: Date Signed tags: Tags material_release: @@ -1141,7 +1146,7 @@ en: amendment_signed_message: Release amendment signed successfully! Thank you new: amendment: - heading: Amendment + heading: Additional Clause copy_url: Copy sign amendment URL signature: heading: Signature diff --git a/config/locales/es.yml b/config/locales/es.yml index b87f3aa..fca74aa 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -21,6 +21,7 @@ es: notes: Notes (ES) signed_at: Date Signed (ES) tags: Tags (ES) + owner_info: Owner Info (ES) activerecord: attributes: appearance_release: @@ -285,6 +286,8 @@ es: person_email: Dirección de correo electrónico person_name: Nómbre person_phone: Número de teléfono + contract_template: + amendment_clause: Additional Contract Clause (ES) material_release: guardian_2_address_city: Guardian 2 city (ES) guardian_2_address_country: Guardian 2 country (ES) @@ -408,13 +411,13 @@ es: index: table_headers: address: Address (ES) - amendment_signed: Amendment (ES) + amendment_signed: Additional Clause (ES) notes: Notes (ES) signed_at: Date Signed (ES) tags: Tags (ES) location_release: actions: - sign_amendment: Sign Amendment (ES) + sign_amendment: Sign Additional Clause (ES) messages: amendment_not_signed_tooltip: Amendment not yet signed (ES) amendment_signed_tooltip: Amendment Signed (ES) @@ -436,6 +439,7 @@ es: table_headers: name: Name (ES) notes: Notes (ES) + owner_info: Owner Info signed_at: Date Signed (ES) tags: Tags (ES) medical_releases: @@ -500,7 +504,7 @@ es: amendment_signed_message: Release amendment signed successfully! Thank you (ES) new: amendment: - heading: Amendment + heading: Additional Clause (ES) copy_url: Copy sign amendment URL (ES) signature: heading: Signature (ES) diff --git a/config/routes.rb b/config/routes.rb index 7a9f412..534fa25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -160,6 +160,7 @@ Rails.application.routes.draw do scope 'v1' do get 'sync' => 'sync#index' post 'user_token' => 'user_token#create' + post 'users' => 'users#create' resource :profiles, only: [:show] resources :projects, only: [:index] do resources :broadcasts, only: [:index, :show, :update] diff --git a/lib/knock_monkeypatch.rb b/lib/knock_monkeypatch.rb new file mode 100644 index 0000000..ade5f2c --- /dev/null +++ b/lib/knock_monkeypatch.rb @@ -0,0 +1,7 @@ +module Knock + class AuthTokenController < ApplicationController + skip_before_action :authenticate + alias authenticate_with_token authenticate + before_action :authenticate_with_token + end +end \ No newline at end of file diff --git a/spec/controllers/api/user_token_controller_spec.rb b/spec/controllers/api/user_token_controller_spec.rb new file mode 100644 index 0000000..cb01e35 --- /dev/null +++ b/spec/controllers/api/user_token_controller_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::UserTokenController, type: :request do + let(:current_user) { create(:user) } + + describe '#create' do + it 'returns error if credentials are not corrent and does not set cookie' do + + post create_endpoint, params: wrong_auth_params + + expect(response).to be_successful + expect(response.body).to match record_not_found + expect(cookie_data).to eq nil + end + + it 'sends token and cookie if credentials are correct' do + post create_endpoint, params: correct_auth_params + + expect(response).to be_successful + expect(response.body).not_to match record_not_found + expect(response.body).to match token_response + expect(cookie_data).not_to eq nil + end + end + + private + + def wrong_auth_params + { + auth: { + email: 'wrong_email@api-test.com', + password: 'password' + } + } + end + + def correct_auth_params + { + auth: { + email: current_user.email, + password: 'password' + } + } + end + + def create_endpoint + '/api/v1/user_token' + end + + def record_not_found + /Record not found/ + end + + def token_response + /jwt/ + end + + def cookie_data + cookies[:_easy_release_session] + end +end diff --git a/spec/controllers/api/users_controller_spec.rb b/spec/controllers/api/users_controller_spec.rb new file mode 100644 index 0000000..e785c73 --- /dev/null +++ b/spec/controllers/api/users_controller_spec.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::UsersController, type: :controller do + before do + ENV['CUSTOM_API_TOKEN'] = "custom_token" + end + describe '#create' do + context 'Invalid token' do + it 'Returns 401 (Unauthorized) status if token is not valid' do + + post :create + + expect(response).not_to be_successful + expect(response).to have_http_status(401) + end + end + + context 'Valid token' do + before :each do + controller.request.env['HTTP_AUTHORIZATION'] = 'Bearer custom_token' + end + + it 'Returns Server error if user param is missing' do + user_count = User.all.count + + expect do + post :create + end.to raise_exception ActionController::ParameterMissing + + expect(User.all.count).to eq user_count + end + + it 'Returns Server Error if email or password is missing' do + user_count = User.all.count + + expect do + post :create, params: { user: { email: "a@b.com" } } + end.to raise_exception ActionController::ParameterMissing + + expect do + post :create, params: { user: { password: "123" } } + end.to raise_exception ActionController::ParameterMissing + + expect(User.all.count).to eq user_count + end + + it 'Returns Server Error if body contains not permitted params' do + user_count = User.all.count + + expect do + post :create, params: { user: { email: "a@b.com", password: "123", admin: true } } + end.to raise_exception ActionController::UnpermittedParameters + + expect(User.all.count).to eq user_count + end + + it 'Creates user if body contains correct params' do + expect do + post :create, params: { user: { email: "a@b.com", password: "123" } } + end.to change(User, :count).by(1) + + expect(response).to be_successful + end + + it 'Nothing changes if existing email is used' do + create(:user, email: "a@b.com") + + expect do + post :create, params: { user: { email: "a@b.com", password: "123" } } + end.not_to change(User, :count) + + expect(response).to be_successful + end + end + end +end diff --git a/spec/factories/acquired_media_releases.rb b/spec/factories/acquired_media_releases.rb index 952f049..b45c57e 100644 --- a/spec/factories/acquired_media_releases.rb +++ b/spec/factories/acquired_media_releases.rb @@ -4,6 +4,22 @@ FactoryBot.define do name "Test Acquired Media Release" + trait :with_address do + person_address_street1 "St1" + person_address_street2 "St2" + person_address_city "City" + person_address_state "State" + person_address_zip "123" + person_address_country "US" + end + + trait :with_owner_info do + person_first_name "Jane" + person_last_name "Doe" + person_phone "100-555-1001" + person_email "owner@email.com" + end + trait :native do signature do path = Rails.root.join("spec", "fixtures", "files", "signature.png") diff --git a/spec/factories/material_releases.rb b/spec/factories/material_releases.rb index 164979f..c5ebb17 100644 --- a/spec/factories/material_releases.rb +++ b/spec/factories/material_releases.rb @@ -4,10 +4,20 @@ FactoryBot.define do name "Test Materials" + trait :with_address do + person_address_street1 "St1" + person_address_street2 "St2" + person_address_city "City" + person_address_state "State" + person_address_zip "123" + person_address_country "US" + end + trait :native do person_first_name "Jane" person_last_name "Doe" person_phone "100-555-1001" + person_email "owner@email.com" signature do path = Rails.root.join("spec", "fixtures", "files", "signature.png") diff --git a/spec/features/user_managing_acquired_media_releases_spec.rb b/spec/features/user_managing_acquired_media_releases_spec.rb index 61ac8c8..0d4484d 100644 --- a/spec/features/user_managing_acquired_media_releases_spec.rb +++ b/spec/features/user_managing_acquired_media_releases_spec.rb @@ -165,6 +165,24 @@ feature "User managing acquired_media releases" do sign_in current_user end + scenario "index table shows owner info" do + release = create(:acquired_media_release, :with_owner_info, :with_address, project: project) + + visit project_acquired_media_releases_path(project) + + expect(page).to have_content owner_info_table_header + + expect(page).to have_content release.person_first_name + expect(page).to have_content release.person_last_name + expect(page).to have_content release.person_phone + expect(page).to have_content release.person_email + expect(page).to have_content release.person_address_street1 + expect(page).to have_content release.person_address_city + expect(page).to have_content release.person_address_state + expect(page).to have_content release.person_address_zip + expect(page).to have_content release.person_address_country + end + scenario "creating a release for an adult", js: true do visit new_project_acquired_media_release_path(project) @@ -262,62 +280,63 @@ feature "User managing acquired_media releases" do end scenario "creating, updating, destroying a release", js: true do - release_data = { - name: "Test Acquired Media Release", - applicable_media: ApplicableMedium.last.label, - territory: Territory.last.label, - term: Term.last.label, - restriction: Restriction.first.label, - restriction_text: "Not available in China", - } + resize_window_to(1_000, 1_000) do + release_data = { + name: "Test Acquired Media Release", + applicable_media: ApplicableMedium.last.label, + territory: Territory.last.label, + term: Term.last.label, + restriction: Restriction.first.label, + restriction_text: "Not available in China", + } - sign_in current_user - visit new_project_acquired_media_release_path(project) + sign_in current_user + visit new_project_acquired_media_release_path(project) - by "attaching only a contract" do - attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false - click_button create_release_button + by "attaching only a contract" do + attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false + click_button create_release_button - expect(page).to have_invalid_field(acquired_media_name_field) - end - - by "attaching files" do - drop_file Rails.root.join(file_fixture("video_file.mp4")), type: "file-info-dropzone" - click_button create_release_button - - expect(page).to have_invalid_field(acquired_media_name_field) - end - - by "filling out the remaining information" do - fill_in_release_fields release_data - click_button create_release_button - - expect(page).to have_content(create_release_notice) - expect(page).to have_content("1") - - click_on "Manage" - expect(page).to have_link("Download") - end - - it_also "updates an existing release" do - click_link "Edit" - - within ".dropzone" do - expect(page).to have_filename("video_file.mp4") + expect(page).to have_invalid_field(acquired_media_name_field) end - expect(page).to have_filled_in_data(release_data) + by "attaching files" do + drop_file Rails.root.join(file_fixture("video_file.mp4")), type: "file-info-dropzone" + click_button create_release_button - fill_in_release_fields name: "New name" - drop_file Rails.root.join(file_fixture("person_photo.png")), type: "file-info-dropzone" - click_button update_release_button + expect(page).to have_invalid_field(acquired_media_name_field) + end - expect(page).to have_content(update_release_notice) - expect(page).to have_content("New name") - expect(page).to have_content("2") - end + by "filling out the remaining information" do + fill_in_release_fields release_data + click_button create_release_button - it_also "deletes an existing release" do + expect(page).to have_content(create_release_notice) + expect(page).to have_content("1") + + click_on "Manage" + expect(page).to have_link("Download") + end + + it_also "updates an existing release" do + click_link "Edit" + + within ".dropzone" do + expect(page).to have_filename("video_file.mp4") + end + + expect(page).to have_filled_in_data(release_data) + + fill_in_release_fields name: "New name" + drop_file Rails.root.join(file_fixture("person_photo.png")), type: "file-info-dropzone" + click_button update_release_button + + expect(page).to have_content(update_release_notice) + expect(page).to have_content("New name") + expect(page).to have_content("2") + end + + it_also "deletes an existing release" do click_button "Manage" accept_alert do click_link "Delete" @@ -325,6 +344,7 @@ feature "User managing acquired_media releases" do expect(page).not_to have_content("New name") end + end end scenario "viewing the contract PDF for an adult" do @@ -836,4 +856,8 @@ feature "User managing acquired_media releases" do def successful_import_message t 'acquired_media_releases.create.notice' end + + def owner_info_table_header + t 'acquired_media_releases.index.table_headers.owner_info' + end end diff --git a/spec/features/user_managing_location_releases_spec.rb b/spec/features/user_managing_location_releases_spec.rb index b7cf8f7..4b3da39 100644 --- a/spec/features/user_managing_location_releases_spec.rb +++ b/spec/features/user_managing_location_releases_spec.rb @@ -87,7 +87,7 @@ feature "User managing location releases" do visit new_account_project_contract_template_location_release_amendment_path(project.account, project, contract_template, release) - expect(page).to have_content amendments_heading + expect(page).to have_content amendments_heading.upcase fill_in amendment_signer_name_field, with: 'Big Signer' draw_signature file_fixture("signature.png"), amendment_signature_field @@ -250,10 +250,7 @@ feature "User managing location releases" do new_window = window_opened_by { click_link sign_amendment_link } within_window new_window do - expect(page).to have_content amendments_heading - expect(page).to have_content signed_contract_preview.upcase - - expect(page).to have_selector 'embed' + expect(page).to have_content amendments_heading.upcase fill_in amendment_signer_name_field, with: 'Big Signer' draw_signature file_fixture("signature.png"), amendment_signature_field diff --git a/spec/features/user_managing_material_releases_spec.rb b/spec/features/user_managing_material_releases_spec.rb index b98f5d6..594d20a 100644 --- a/spec/features/user_managing_material_releases_spec.rb +++ b/spec/features/user_managing_material_releases_spec.rb @@ -185,6 +185,24 @@ feature "User managing material releases" do sign_in current_user end + scenario "index table shows owner info" do + release = create(:material_release, :native, :with_address, project: project) + + visit project_material_releases_path(project) + + expect(page).to have_content owner_info_table_header + + expect(page).to have_content release.person_first_name + expect(page).to have_content release.person_last_name + expect(page).to have_content release.person_phone + expect(page).to have_content release.person_email + expect(page).to have_content release.person_address_street1 + expect(page).to have_content release.person_address_city + expect(page).to have_content release.person_address_state + expect(page).to have_content release.person_address_zip + expect(page).to have_content release.person_address_country + end + scenario "creating a release for and adult", js: true do visit new_project_material_release_path(project) @@ -813,4 +831,8 @@ feature "User managing material releases" do def signature_field 'material_release_signature_base64' end + + def owner_info_table_header + t 'material_releases.index.table_headers.owner_info' + end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 97468b7..09e50ec 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -148,6 +148,18 @@ RSpec.describe Account do end end + describe "#total_number_of_releases" do + it "returns total number of releases" do + account = create(:account) + project = create(:project, account: account) + appearance_release = create(:appearance_release, project: project) + talent_release = create(:talent_release, project: project) + material_release = create(:material_release, project: project) + + expect(account.total_number_of_releases).to eq 3 + end + end + describe "#me_suite_enabled?" do it "returns true when plan_uid is me_suite" do expect(build(:account, plan_uid: "me_suite").me_suite_enabled?).to eq true