diff --git a/app/controllers/broadcasts_controller.rb b/app/controllers/broadcasts_controller.rb index c83338a..aad9bb1 100644 --- a/app/controllers/broadcasts_controller.rb +++ b/app/controllers/broadcasts_controller.rb @@ -5,6 +5,7 @@ class BroadcastsController < ApplicationController before_action :build_broadcast, only: [:new, :create] before_action :set_broadcast, only: [:show, :destroy, :update] before_action :set_multi_view_broadcasts, only: [:show] + before_action :show_splash_screen, only: :index def index @broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page]) @@ -49,6 +50,10 @@ class BroadcastsController < ApplicationController private + def show_splash_screen + render :splash if broadcasts.count.zero? + end + def broadcast_params params.require(:broadcast).permit(:name, files: []) end diff --git a/app/controllers/contract_templates_controller.rb b/app/controllers/contract_templates_controller.rb index 5f3fbc6..3c15127 100644 --- a/app/controllers/contract_templates_controller.rb +++ b/app/controllers/contract_templates_controller.rb @@ -7,6 +7,7 @@ class ContractTemplatesController < ApplicationController before_action :set_project, except: [:destroy] before_action :set_contract_template, only: [:destroy] + before_action :show_splash_screen, only: :index def index @contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page]) @@ -38,6 +39,10 @@ class ContractTemplatesController < ApplicationController private + def show_splash_screen + render :splash if contract_templates.non_archived.count.zero? + end + def set_contract_template @contract_template = authorize contract_templates.find(params[:id]) end diff --git a/app/controllers/public/misc_releases_controller.rb b/app/controllers/public/misc_releases_controller.rb index 61e4933..6e31889 100644 --- a/app/controllers/public/misc_releases_controller.rb +++ b/app/controllers/public/misc_releases_controller.rb @@ -46,6 +46,7 @@ class Public::MiscReleasesController < Public::BaseController .permit( person_params, guardian_params, + questionnaire_params, :signature_base64, :locale, :contract_template, @@ -85,6 +86,26 @@ class Public::MiscReleasesController < Public::BaseController ] end + def questionnaire_params + [ + :question_1_answer, + :question_2_answer, + :question_3_answer, + :question_4_answer, + :question_5_answer, + :question_6_answer, + :question_7_answer, + :question_8_answer, + :question_9_answer, + :question_10_answer, + :question_11_answer, + :question_12_answer, + :question_13_answer, + :question_14_answer, + :question_15_answer, + ] + end + def misc_release_params_with_locale misc_release_params.merge(locale: I18n.locale) end diff --git a/app/controllers/task_requests_controller.rb b/app/controllers/task_requests_controller.rb index 07172d0..81723d0 100644 --- a/app/controllers/task_requests_controller.rb +++ b/app/controllers/task_requests_controller.rb @@ -4,6 +4,7 @@ class TaskRequestsController < ApplicationController before_action :set_project before_action :build_task_request, only: [:new, :create] before_action :set_task_request, only: [:show, :edit, :update, :cancel] + before_action :show_splash_screen, only: :index def index @task_requests = task_requests.order_by_recent.paginate(page: params[:page]) @@ -46,6 +47,10 @@ class TaskRequestsController < ApplicationController private + def show_splash_screen + render :splash if task_requests.count.zero? + end + def task_request_params params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: []) end diff --git a/app/controllers/videos_controller.rb b/app/controllers/videos_controller.rb index 18465bd..049341e 100644 --- a/app/controllers/videos_controller.rb +++ b/app/controllers/videos_controller.rb @@ -3,6 +3,7 @@ class VideosController < ApplicationController before_action :set_project, only: [:index, :new, :create, :landing] before_action :set_video, only: [:edit, :update] + before_action :show_splash_screen, only: :index def landing authorize Video, :new? @@ -60,6 +61,10 @@ class VideosController < ApplicationController private + def show_splash_screen + render :splash if videos.count.zero? + end + def set_project @project = policy_scope(Project).find(params[:project_id]) end diff --git a/app/helpers/wordmark_helper.rb b/app/helpers/wordmark_helper.rb index 5b6eca7..09820c4 100644 --- a/app/helpers/wordmark_helper.rb +++ b/app/helpers/wordmark_helper.rb @@ -13,10 +13,13 @@ module WordmarkHelper css += options[:class].to_s content_tag(:div, class: css) do - safe_join [ + elements = [ content_tag(:span, t("shared.#{product_name}")), content_tag(:span, t("shared.me")) ] + prefix = options[:prefix] + elements.unshift content_tag(:span, "#{prefix} ") unless prefix.blank? + safe_join elements end end end diff --git a/app/models/contract_template.rb b/app/models/contract_template.rb index 6b213a6..1115123 100644 --- a/app/models/contract_template.rb +++ b/app/models/contract_template.rb @@ -5,6 +5,8 @@ class ContractTemplate < ApplicationRecord include Syncable include PgSearch + NUMBER_OF_CUSTOM_FIELDS = 15 + belongs_to :project belongs_to :parent, class_name: 'ContractTemplate', optional: true has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id' @@ -59,4 +61,8 @@ class ContractTemplate < ApplicationRecord def archive update(archived_at: Time.zone.now) end + + def has_questionnaire? + (1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence } + end end diff --git a/app/models/misc_release.rb b/app/models/misc_release.rb index 54887d3..f9437dd 100644 --- a/app/models/misc_release.rb +++ b/app/models/misc_release.rb @@ -10,6 +10,8 @@ class MiscRelease < ApplicationRecord include GuardianName include GuardianPhotoable + NUMBER_OF_CUSTOM_FIELDS = 15 + composed_of :person_address, class_name: "Address", mapping: [ diff --git a/app/views/broadcasts/splash.html.erb b/app/views/broadcasts/splash.html.erb new file mode 100644 index 0000000..9df4d51 --- /dev/null +++ b/app/views/broadcasts/splash.html.erb @@ -0,0 +1,59 @@ +
+
+ <%= product_wordmark :direct_me, prefix: t('.headings.welcome'), class: "h2" %> +

<%= t '.headings.subtitle' %> +

+ + <%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %> + <% if policy(Broadcast).new? %> + <%= link_to t(".actions.create_stream"), [:new, @project, :broadcast], class: "btn btn-success border align-self-center h-50 pb-2" %> + <% end %> +
+ +
+ +
+
+
+
+
+
+ + + + + + +
+ Video tutorial will be available soon +
+
+
+
+
+
+
+
+

<%= t '.headings.how_it_works' %>

+
    +
  1. <%= t '.list_items.create_stream' %>
  2. +
  3. <%= t '.list_items.share_stream' %>
  4. +
  5. <%= t '.list_items.launch_video_conference' %>
  6. +
  7. <%= t '.list_items.share_files' %>
  8. +
+
+
+
+
+

<%= t '.headings.benefits' %>

+
    + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_from_mobile_app'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.direct_shoots_anywhere'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.share_live_stream'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_multiple_cameras'))) %> +
+
+
+
+
+
diff --git a/app/views/contract_templates/_form.html.erb b/app/views/contract_templates/_form.html.erb index 821fddf..5b11b31 100644 --- a/app/views/contract_templates/_form.html.erb +++ b/app/views/contract_templates/_form.html.erb @@ -2,7 +2,7 @@ <%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
<%= form.text_field :name, wrapper_class: "col-sm-6" %> - <%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical) } }, class: "form-control custom-select" %> + <%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %> diff --git a/app/views/contract_templates/splash.html.erb b/app/views/contract_templates/splash.html.erb new file mode 100644 index 0000000..f2ef542 --- /dev/null +++ b/app/views/contract_templates/splash.html.erb @@ -0,0 +1,58 @@ +
+
+ <%= product_wordmark :release_me, prefix: t('.headings.welcome'), class: "h2" %> +

<%= t '.headings.subtitle' %> +

+ + <%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %> + <% if policy(ContractTemplate).new? %> + <%= link_to t(".actions.create_template"), [:new, @project, :contract_template], class: "btn btn-success border align-self-center h-50 pb-2" %> +<% end %> +
+ +
+ +
+
+
+
+
+
+ + + + + + +
+ Video tutorial will be available soon +
+
+
+
+
+
+
+
+

<%= t '.headings.how_it_works' %>

+
    +
  1. <%= t '.list_items.create_releases' %>
  2. +
  3. <%= t '.list_items.download_mobile_app' %>
  4. +
  5. <%= t '.list_items.print_QR_code' %>
  6. +
  7. <%= t '.list_items.releases_automatically_organized' %>
  8. +
+
+
+
+
+

<%= t '.headings.benefits' %>

+
    + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.all_releases_available'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.manage_large_audience'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.add_tags_and_notes'))) %> +
+
+
+
+
+
\ No newline at end of file diff --git a/app/views/contracts/_medical_questionnaire.html.erb b/app/views/contracts/_questionnaire.html.erb similarity index 57% rename from app/views/contracts/_medical_questionnaire.html.erb rename to app/views/contracts/_questionnaire.html.erb index e6e20c8..665cc18 100644 --- a/app/views/contracts/_medical_questionnaire.html.erb +++ b/app/views/contracts/_questionnaire.html.erb @@ -1,8 +1,8 @@ -

<%= t ".heading" %>

+

<%= t ".heading.#{releasable.model_name.param_key}" %>

-<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %> +<% (1..releasable.class::NUMBER_OF_CUSTOM_FIELDS).each do |n| %> <% if contract_template.public_send("question_#{n}_text").present? %>

<%= contract_template.public_send("question_#{n}_text") %>

<%= releasable.public_send("question_#{n}_answer") %>

<% end %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/contracts/pdf.html.erb b/app/views/contracts/pdf.html.erb index 142d51e..b430b4e 100644 --- a/app/views/contracts/pdf.html.erb +++ b/app/views/contracts/pdf.html.erb @@ -16,9 +16,9 @@ <%= contract_template.guardian_clause %> <% end %> -<% if releasable.model_name == "MedicalRelease" %> +<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
- <%= render "contracts/medical_questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %> + <%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
<% end %> diff --git a/app/views/public/misc_releases/new.html.erb b/app/views/public/misc_releases/new.html.erb index 35672ce..804068d 100644 --- a/app/views/public/misc_releases/new.html.erb +++ b/app/views/public/misc_releases/new.html.erb @@ -20,6 +20,19 @@
<% end %> + <% if @contract_template.has_questionnaire? %> + <%= card_field_set_tag t(".questionnaire.heading") do %> + <% (1..MiscRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %> + <% if @contract_template.public_send("question_#{n}_text").present? %> +
+ <%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %> +
+ <% end %> + <% end %> + <% end %> +
+ <% end %> + <%= card_field_set_tag t(".personal_info.heading") do %>
<%= t ".personal_info.instructions" %>
diff --git a/app/views/task_requests/splash.html.erb b/app/views/task_requests/splash.html.erb new file mode 100644 index 0000000..98d626f --- /dev/null +++ b/app/views/task_requests/splash.html.erb @@ -0,0 +1,58 @@ +
+
+ <%= product_wordmark :task_me, prefix: t('.headings.welcome'), class: "h2" %> +

<%= t '.headings.subtitle' %> +

+ + <%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %> + <% if policy(TaskRequest).new? %> + <%= link_to t(".actions.create_task_request"), [:new, @project, :task_request], class: "btn btn-success border align-self-center h-50 pb-2" %> + <% end %> +
+ +
+ +
+
+
+
+
+
+ + + + + + +
+ Video tutorial will be available soon +
+
+
+
+
+
+
+
+

<%= t '.headings.how_it_works' %>

+
    +
  1. <%= t '.list_items.enter_task_request' %>
  2. +
  3. <%= t '.list_items.state_deadline' %>
  4. +
  5. <%= t '.list_items.enter_number_of_hours' %>
  6. +
  7. <%= t '.list_items.virtual_assistant_delivers_task' %>
  8. +
+
+
+
+
+

<%= t '.headings.benefits' %>

+
    + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_need_for_full_time_staff'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_workload'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.spend_per_task'))) %> +
+
+
+
+
+
diff --git a/app/views/videos/splash.html.erb b/app/views/videos/splash.html.erb new file mode 100644 index 0000000..e620631 --- /dev/null +++ b/app/views/videos/splash.html.erb @@ -0,0 +1,59 @@ +
+
+ <%= product_wordmark :deliver_me, prefix: t('.headings.welcome'), class: "h2" %> +

<%= t '.headings.subtitle' %> +

+ + <%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %> + <% if policy(Video).new? %> + <%= link_to t(".actions.upload_video"), [:new, @project, :video], class: "btn btn-success border align-self-center h-50 pb-2" %> + <% end %> +
+ +
+ +
+
+
+
+
+
+ + + + + + +
+ Video tutorial will be available soon +
+
+
+
+
+
+
+
+

<%= t '.headings.how_it_works' %>

+
    +
  1. <%= t '.list_items.import_video' %>
  2. +
  3. <%= t '.list_items.import_EDLs' %>
  4. +
  5. <%= t '.list_items.AI_generates_documents' %>
  6. +
  7. <%= t '.list_items.download_documents' %>
  8. +
+
+
+
+
+

<%= t '.headings.benefits' %>

+
    + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_labor_cost'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.more_accurate'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.simplifies_cue_sheets'))) %> + <%= content_tag(:li, fa_icon("check li", text: t('.list_items.production_elements_logs'))) %> +
+
+
+
+
+
\ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index cc28c89..7734d89 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -207,6 +207,24 @@ en: new: heading: Create Live Stream + splash: + actions: + book_demo: Schedule a Demo + create_stream: Create New Live Stream + headings: + benefits: Benefits + how_it_works: How It Works + subtitle: Remote directing and video village solution + welcome: Welcome to + list_items: + create_stream: Create a live stream + direct_shoots_anywhere: Direct shoots anywhere around the world + launch_video_conference: Launch Video Conference using plugin + share_files: Share files via the ME Suite mobile app + share_live_stream: Share live stream with clients all over the the world + share_stream: Share live stream link with clients + stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera + stream_multiple_cameras: Stream multiple cameras at one time bulk_taggings: new_bulk_tag_modal: submit: Add @@ -233,7 +251,7 @@ en: archived_notice: The release template has been archived form: custom_fields: - heading: Medical Questionnaire + heading: Questionnaire instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden. exploitable_rights: heading: Exploitable Rights @@ -252,9 +270,24 @@ en: signed_release_count: No. Signed Releases new: heading: New Release Template + splash: + actions: + book_demo: Schedule a Demo + create_template: Create New Release Template + headings: + benefits: Benefits + how_it_works: How It Works + subtitle: The easiest way to create and manage releases. + welcome: Welcome to + list_items: + add_tags_and_notes: Add tags and notes to releases for added organization and searchability + all_releases_available: All release types available including Covid Medical, Appearance, Location and more + create_releases: Create releases for your video shoot + download_mobile_app: Download the ME Suite mobile app + manage_large_audience: Easily manage large audiences with the crowd control feature + print_QR_code: Print out release QR codes + releases_automatically_organized: Releases are automatically organized as they’re submitted contracts: - medical_questionnaire: - heading: Medical Questionnaire photos: guardian_2_photo_heading: Second guardian photo guardian_photo_heading: Guardian photo @@ -264,6 +297,10 @@ en: minor_photos_heading: one: Minor photo other: Minor photos + questionnaire: + heading: + medical_release: Medical Questionnaire + misc_release: Questionnaire signature_page: heading: Signature Page instructions: "By signing this signature page, as of the date listed below, I hereby agree, acknowledge and accept the terms and conditions listed in this %{releasable_name}." @@ -324,11 +361,11 @@ en: notice: The release has been updated helpers: help: - task_request: - time_allowed: Minimum of 2 hours, no partial hours allowed contract_template: fee: Leave at $0.00 for no-fee guardian_clause: Leave blank if not required for this contract + task_request: + time_allowed: Minimum of 2 hours, no partial hours allowed video: audio_only_edl_file: If you do not upload an Audio Only EDL, the software will not generate a BiG Music Cue Sheet. edl_file: Please follow our directions on exporting the All Tracks EDL. Failure to do so could result in inaccurate and incomplete reporting. @@ -451,6 +488,30 @@ en: person_last_name: Last name person_name: Name person_phone: Phone number + misc_release: + guardian_address_city: Guardian city + guardian_address_country: Guardian country + guardian_address_state: Guardian state + guardian_address_street1: Guardian address + guardian_address_street2: Guardian address (Line 2) + guardian_address_zip: Guardian zip code + guardian_email: Guardian email + guardian_first_name: Guardian first name + guardian_last_name: Guardian last name + guardian_phone: Guardian phone + minor: Is the person a minor? + person_address_city: City + person_address_country: Country + person_address_state: State + person_address_street1: Address + person_address_street2: Address (Line 2) + person_address_zip: Zip code + person_date_of_birth: Date of birth + person_email: Email address + person_first_name: First name + person_last_name: Last name + person_name: Name + person_phone: Phone number music_release: person_address: Address person_address_city: City @@ -1024,6 +1085,8 @@ en: instructions: Now, enter your personal information. photo: heading: Photos + questionnaire: + heading: Questionnaire signature: heading: Signature talent_releases: @@ -1202,6 +1265,23 @@ en: heading: New Task Request show: empty: Attached files will appear here. + splash: + actions: + book_demo: Schedule a Demo + create_task_request: Create Task Request + headings: + benefits: Benefits + how_it_works: How It Works + subtitle: Pay-by-the-hour, digitally-enabled remote assistants + welcome: Welcome to + list_items: + enter_number_of_hours: Enter the number of hours you want the task worked on + enter_task_request: Enter your task request + reduces_need_for_full_time_staff: Reduces need to hire full-time staff + reduces_workload: Reduces workload for current staff + spend_per_task: Spend as little as $60 per task + state_deadline: State your deadline + virtual_assistant_delivers_task: Virtual assistant delivers task via TaskME portal task_request: actions: manage: Manage @@ -1273,6 +1353,24 @@ en: new: heading: Upload Video subheading: 2 of 2 Files + splash: + actions: + book_demo: Schedule a Demo + upload_video: Upload New Video + headings: + benefits: Benefits + how_it_works: How It Works + subtitle: Automate your deliverable documents + welcome: Welcome to + list_items: + AI_generates_documents: AI generates deliverable documents + download_documents: Download deliverable documents + import_EDLs: Import your EDLs + import_video: Import your video + more_accurate: More accurate than human-generated reports + production_elements_logs: Production Elements Logs, and more + reduces_labor_cost: Reduces labor costs + simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets update: notice: The video has been updated video: diff --git a/config/locales/es.yml b/config/locales/es.yml index 3384431..91e271f 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -57,6 +57,25 @@ es: pdf: do_not_copy_warning: "Do not copy (ES)" serial_number_label: "Serial Number (ES)" + broadcasts: + splash: + actions: + book_demo: Schedule a Demo + create_stream: Create New Live Stream + headings: + benefits: Benefits + how_it_works: How It Works + subtitle: Remote directing and video village solution + welcome: Welcome to + list_items: + create_stream: Create a live stream + direct_shoots_anywhere: Direct shoots anywhere around the world + launch_video_conference: Launch Video Conference using plugin + share_files: Share files via the ME Suite mobile app + share_live_stream: Share live stream with clients all over the the world + share_stream: Share live stream link with clients + stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera + stream_multiple_cameras: Stream multiple cameras at one time contract_templates: blank_contracts: create: @@ -70,6 +89,23 @@ es: heading: Legal (ES) release_info: heading: Release Info (ES) + splash: + actions: + book_demo: Schedule a Demo (ES) + create_template: Create New Release Template (ES) + headings: + benefits: "" + how_it_works: How It Works (ES) + subtitle: The easiest way to create and manage releases. (ES) + welcome: Welcome to (ES) + list_items: + add_tags_and_notes: Add tags and notes to releases for added organization and searchability (ES) + all_releases_available: All release types available including Covid Medical, Appearance, Location and more (ES) + create_releases: Create releases for your video shoot (ES) + download_mobile_app: Download the ME Suite mobile app (ES) + manage_large_audience: Easily manage large audiences with the crowd control feature (ES) + print_QR_code: Print out release QR codes (ES) + releases_automatically_organized: Releases are automatically organized as they’re submitted (ES) contracts: photos: guardian_2_photo_heading: Second guardian photo (ES) @@ -358,8 +394,44 @@ es: index: table_headers: task_request_description: Description (ES) + splash: + actions: + book_demo: Schedule a Demo (ES) + create_task_request: Create Task Request + headings: + benefits: Benefits (ES) + how_it_works: How It Works (ES) + subtitle: Pay-by-the-hour, digitally-enabled remote assistants (ES) + welcome: Welcome to (ES) + list_items: + enter_number_of_hours: Enter the number of hours you want the task worked on (ES) + enter_task_request: Enter your task request (ES) + reduces_need_for_full_time_staff: Reduces need to hire full-time staff (ES) + reduces_workload: Reduces workload for current staff (ES) + spend_per_task: Spend as little as $60 per task (ES) + state_deadline: State your deadline (ES) + virtual_assistant_delivers_task: Virtual assistant delivers task via TaskME portal (ES) task_request: actions: manage: Manage (ES) open_deliverable: Open Deliverable (ES) read_more: read more (ES) + videos: + splash: + actions: + book_demo: Schedule a Demo (ES) + upload_video: Upload New Video (ES) + headings: + benefits: Benefits (ES) + how_it_works: How It Works (ES) + subtitle: Automate your deliverable documents (ES) + welcome: Welcome to (ES) + list_items: + AI_generates_documents: AI generates deliverable documents (ES) + download_documents: Download deliverable documents (ES) + import_EDLs: Import your EDLs (ES) + import_video: Import your video (ES) + more_accurate: More accurate than human-generated reports (ES) + production_elements_logs: Production Elements Logs, and more (ES) + reduces_labor_cost: Reduces labor costs (ES) + simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets (ES) diff --git a/db/migrate/20200702152130_add_question_answers_to_misc_releases.rb b/db/migrate/20200702152130_add_question_answers_to_misc_releases.rb new file mode 100644 index 0000000..95ab46c --- /dev/null +++ b/db/migrate/20200702152130_add_question_answers_to_misc_releases.rb @@ -0,0 +1,20 @@ +class AddQuestionAnswersToMiscReleases < ActiveRecord::Migration[6.0] + def change + add_column :misc_releases, :question_1_answer, :text + add_column :misc_releases, :question_2_answer, :text + add_column :misc_releases, :question_3_answer, :text + add_column :misc_releases, :question_4_answer, :text + add_column :misc_releases, :question_5_answer, :text + add_column :misc_releases, :question_6_answer, :text + add_column :misc_releases, :question_7_answer, :text + add_column :misc_releases, :question_8_answer, :text + add_column :misc_releases, :question_9_answer, :text + add_column :misc_releases, :question_10_answer, :text + add_column :misc_releases, :question_11_answer, :text + add_column :misc_releases, :question_12_answer, :text + add_column :misc_releases, :question_13_answer, :text + add_column :misc_releases, :question_14_answer, :text + add_column :misc_releases, :question_15_answer, :text + + end +end diff --git a/db/structure.sql b/db/structure.sql index c4de3ba..51b4216 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -9,20 +9,6 @@ SET xmloption = content; SET client_min_messages = warning; SET row_security = off; --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -- -- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: - -- @@ -331,8 +317,8 @@ CREATE TABLE public.appearance_releases ( person_last_name character varying, guardian_first_name character varying, guardian_last_name character varying, - guardian_email character varying, identifier character varying, + guardian_email character varying, person_address_street2 character varying, person_address_city character varying, person_address_state character varying, @@ -666,15 +652,6 @@ CREATE SEQUENCE public.contract_templates_id_seq ALTER SEQUENCE public.contract_templates_id_seq OWNED BY public.contract_templates.id; --- --- Name: data_migrations; Type: TABLE; Schema: public; Owner: - --- - -CREATE TABLE public.data_migrations ( - version character varying NOT NULL -); - - -- -- Name: directories; Type: TABLE; Schema: public; Owner: - -- @@ -1124,7 +1101,22 @@ CREATE TABLE public.misc_releases ( signed_at timestamp without time zone, minor boolean DEFAULT false, created_at timestamp(6) without time zone NOT NULL, - updated_at timestamp(6) without time zone NOT NULL + updated_at timestamp(6) without time zone NOT NULL, + question_1_answer text, + question_2_answer text, + question_3_answer text, + question_4_answer text, + question_5_answer text, + question_6_answer text, + question_7_answer text, + question_8_answer text, + question_9_answer text, + question_10_answer text, + question_11_answer text, + question_12_answer text, + question_13_answer text, + question_14_answer text, + question_15_answer text ); @@ -1401,6 +1393,7 @@ CREATE TABLE public.settings ( -- CREATE SEQUENCE public.settings_id_seq + AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE @@ -1436,6 +1429,7 @@ CREATE TABLE public.taggings ( -- CREATE SEQUENCE public.taggings_id_seq + AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE @@ -1466,6 +1460,7 @@ CREATE TABLE public.tags ( -- CREATE SEQUENCE public.tags_id_seq + AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE @@ -1826,9 +1821,9 @@ CREATE TABLE public.zoom_meetings ( api_meeting_id character varying, created_at timestamp(6) without time zone NOT NULL, updated_at timestamp(6) without time zone NOT NULL, - status integer DEFAULT 0, zoom_user_id bigint, - project_id bigint + project_id bigint, + status integer DEFAULT 0 ); @@ -2305,14 +2300,6 @@ ALTER TABLE ONLY public.contract_templates ADD CONSTRAINT contract_templates_pkey PRIMARY KEY (id); --- --- Name: data_migrations data_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - --- - -ALTER TABLE ONLY public.data_migrations - ADD CONSTRAINT data_migrations_pkey PRIMARY KEY (version); - - -- -- Name: directories directories_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -3914,6 +3901,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20200619085823'), ('20200619134853'), ('20200622180507'), -('20200625144713'); +('20200625144713'), +('20200702152130'); diff --git a/spec/controllers/broadcasts_controller_spec.rb b/spec/controllers/broadcasts_controller_spec.rb index 08b686a..782299d 100644 --- a/spec/controllers/broadcasts_controller_spec.rb +++ b/spec/controllers/broadcasts_controller_spec.rb @@ -22,7 +22,7 @@ RSpec.describe BroadcastsController, type: :controller do expect(response).to be_successful end - it "renders content" do + it "renders content if theere are existing broadcasts" do create(:broadcast, project: project, name: "Another Broadcast") get :index, params: { project_id: project } @@ -34,12 +34,13 @@ RSpec.describe BroadcastsController, type: :controller do end context "when there are no active broadcasts" do - it "renders an empty message" do + it "renders splash screen" do Broadcast.destroy_all get :index, params: { project_id: project } - expect(response.body).to have_content("Live streams will appear here") + expect(response.body).to have_link create_stream + expect(response.body).to have_link schedule_demo end end @@ -55,10 +56,8 @@ RSpec.describe BroadcastsController, type: :controller do context "for xhr request" do it "filters the broadcasts by a query param" do - appearance_releases = [ - create(:broadcast, skip_create_callback: true, name: "Stream by Adam"), - create(:broadcast, skip_create_callback: true, name: "Stream by Zoe"), - ] + create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Adam") + create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Zoe") get :index, params: { project_id: project, query: "Zoe" }, xhr: true @@ -245,4 +244,12 @@ RSpec.describe BroadcastsController, type: :controller do { files: [contract_file] } end + + def schedule_demo + t 'broadcasts.splash.actions.book_demo' + end + + def create_stream + t 'broadcasts.splash.actions.create_stream' + end end diff --git a/spec/controllers/contract_templates_controller_spec.rb b/spec/controllers/contract_templates_controller_spec.rb index 87ba377..72c77a4 100644 --- a/spec/controllers/contract_templates_controller_spec.rb +++ b/spec/controllers/contract_templates_controller_spec.rb @@ -19,7 +19,7 @@ describe ContractTemplatesController do expect(response).to be_successful end - it 'renders content' do + it 'renders content if there are contract templates' do contract_template = create(:contract_template, name: 'My Contract Template', fee: 50, release_type: 'appearance', project: project) @@ -39,10 +39,11 @@ describe ContractTemplatesController do end context 'when there are no contract templates' do - it 'renders an empty message' do + it 'renders splash screen' do get :index, params: { project_id: project } - expect(response.body).to have_content('Release Templates will appear here') + expect(response.body).to have_link "Create New Release Template" + expect(response.body).to have_link schedule_demo end end @@ -50,6 +51,7 @@ describe ContractTemplatesController do let(:current_user) { create(:user, :associate) } it 'does not show the new contract template button' do + create(:contract_template, project: project) get :index, params: { project_id: project } expect(response.body).not_to have_link('Create New Release Template') @@ -166,4 +168,8 @@ describe ContractTemplatesController do restriction_text: 'restrictions' } end + + def schedule_demo + t 'contract_templates.splash.actions.book_demo' + end end diff --git a/spec/controllers/task_requests_controller_spec.rb b/spec/controllers/task_requests_controller_spec.rb index 614d814..22df666 100644 --- a/spec/controllers/task_requests_controller_spec.rb +++ b/spec/controllers/task_requests_controller_spec.rb @@ -18,7 +18,14 @@ RSpec.describe TaskRequestsController, type: :controller do expect(response).to be_successful end - it "renders content" do + it "renders splash page if there are no task requests" do + get :index, params: { project_id: project } + + expect(response.body).to have_link "Create Task Request" + expect(response.body).to have_link schedule_demo + end + + it "renders task requests table if there are task requests" do create(:task_request, project: project, description: "Another Request") get :index, params: { project_id: project } @@ -126,4 +133,8 @@ RSpec.describe TaskRequestsController, type: :controller do def update_params { description: "This is updated description" } end + + def schedule_demo + t 'task_requests.splash.actions.book_demo' + end end diff --git a/spec/controllers/videos_controller_spec.rb b/spec/controllers/videos_controller_spec.rb index 63cf92b..a14a0b7 100644 --- a/spec/controllers/videos_controller_spec.rb +++ b/spec/controllers/videos_controller_spec.rb @@ -20,6 +20,7 @@ RSpec.describe VideosController, type: :controller do end it "has a search form" do + create(:video, project: project) get :index, params: { project_id: project } expect(response.body).to have_button("search-button") @@ -43,7 +44,7 @@ RSpec.describe VideosController, type: :controller do end - it "renders content" do + it "renders content if there are existing videos" do video = create(:video, project: project, name: "My Video", number: "001", created_at: 1.day.ago) get :index, params: { project_id: project } @@ -58,10 +59,11 @@ RSpec.describe VideosController, type: :controller do end context "when there are no records" do - it "renders an empty message" do + it "renders splash screen" do get :index, params: { project_id: project } - expect(response.body).to have_content("Videos will appear here") + expect(response.body).to have_link "Upload New Video" + expect(response.body).to have_link schedule_demo end end @@ -277,4 +279,8 @@ RSpec.describe VideosController, type: :controller do def video_update_params attributes_for(:video, :with_graphics_only_edl_file, :with_audio_only_edl_file, name: "Test Video").except(:file) end + + def schedule_demo + t 'videos.splash.actions.book_demo' + end end diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb index dcbe930..2f1b77a 100644 --- a/spec/factories/projects.rb +++ b/spec/factories/projects.rb @@ -16,6 +16,7 @@ FactoryBot.define do appearance_release: true, location_release: true, material_release: true, + misc_release: true, medical_release: true, music_release: true, talent_release: true, diff --git a/spec/features/user_imports_release_templates_spec.rb b/spec/features/user_imports_release_templates_spec.rb index f9e0131..f2c5c60 100644 --- a/spec/features/user_imports_release_templates_spec.rb +++ b/spec/features/user_imports_release_templates_spec.rb @@ -13,6 +13,7 @@ feature "User imports release templates", type: :feature do end scenario "importing two existing templates into a project" do + create(:contract_template, project: project) visit project_contract_templates_path(project) click_on "Import Release Template" select_templates([project_one_template.id, project_two_template.id]) @@ -31,6 +32,7 @@ feature "User imports release templates", type: :feature do end scenario "searching for a template", js: true do + create(:contract_template, project: project) visit project_contract_templates_path(project) click_on "Import Release Template" fill_in "query", with: "Second" diff --git a/spec/features/user_manages_contract_templates_spec.rb b/spec/features/user_manages_contract_templates_spec.rb index 094c8bd..cdba2eb 100644 --- a/spec/features/user_manages_contract_templates_spec.rb +++ b/spec/features/user_manages_contract_templates_spec.rb @@ -11,6 +11,13 @@ RSpec.feature 'User manages contract templates', type: :feature do sign_in(current_user) end + scenario 'splash page is shown if tehre are no contract templates' do + visit project_contract_templates_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content create_release_template + end + scenario 'creating a new release template' do visit new_project_contract_template_path(project) @@ -25,7 +32,7 @@ RSpec.feature 'User manages contract templates', type: :feature do select 'None', from: 'Restriction' click_on 'Create Release Template' - expect(page).to have_content('The release template has been created') + expect(page).to have_content(create_contract_template_success_message) end scenario 'medical release template has a guardian clause field' do @@ -36,10 +43,28 @@ RSpec.feature 'User manages contract templates', type: :feature do fill_hidden guardian_clause_field, with: 'Guardian clause text' click_on 'Create Release Template' - expect(page).to have_content('The release template has been created') + expect(page).to have_content(create_contract_template_success_message) expect(ContractTemplate.last.guardian_clause.body.to_s).to match /Guardian clause text/ end + scenario 'misc release templates has guardian clause and questionnaire', js: true do + visit new_project_contract_template_path(project) + + fill_in 'Name', with: 'My Misc Release' + select 'Misc Release', from: 'Release type' + + expect(page).to have_selector('label', text: 'Guardian Clause') + MiscRelease::NUMBER_OF_CUSTOM_FIELDS.times do |n| + expect(page).to have_field(question_field(n+1)) + end + + fill_in_trix 'contract_template_guardian_clause', with: 'Guardian clause text' + fill_in question_field(1), with: 'How much experience do you have in the industry?' + click_on 'Create Release Template' + + expect(page).to have_content(create_contract_template_success_message) + end + scenario 'preview new talent release template without guardian clause' do visit new_project_contract_template_path(project) select 'Talent Release', from: 'Release type' @@ -143,13 +168,13 @@ RSpec.feature 'User manages contract templates', type: :feature do scenario 'Should not allow negative fees' do fill_in 'Fee', with: '-200' click_on 'Create Release Template' - expect(page).not_to have_content('The release template has been created') + expect(page).not_to have_content(create_contract_template_success_message) end scenario 'Should not allow fees with more than 9 digits' do fill_in 'Fee', with: '9999999999' click_on 'Create Release Template' - expect(page).not_to have_content('The release template has been created') + expect(page).not_to have_content(create_contract_template_success_message) end end @@ -223,12 +248,20 @@ RSpec.feature 'User manages contract templates', type: :feature do let(:current_user) { create(:user, :associate) } it 'does not show management buttons for release templates' do + create(:contract_template, project: project) visit project_contract_templates_path(project) expect(page).not_to have_content('Create New Release Template') expect(page).not_to have_content(import_template_button) expect(page).not_to have_content('Delete') end + + it 'does not show create release button on splash page' do + visit project_contract_templates_path(project) + + expect(page).to have_content schedule_demo + expect(page).not_to have_content create_release_template + end end context 'When the user is account manager' do @@ -242,6 +275,13 @@ RSpec.feature 'User manages contract templates', type: :feature do click_on 'Manage' expect(page).to have_content('Archive') end + + it 'does not show create release button on splash page' do + visit project_contract_templates_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content create_release_template + end end private @@ -270,7 +310,23 @@ RSpec.feature 'User manages contract templates', type: :feature do 'contract_template_guardian_clause_trix_input_contract_template' end + def create_contract_template_success_message + 'The release template has been created' + end + + def question_field(n) + "Question #{n} text" + end + def fill_hidden(id, with:) find(:xpath, "//input[@id='#{id}']", visible: false).set with end + + def schedule_demo + t 'contract_templates.splash.actions.book_demo' + end + + def create_release_template + t 'contract_templates.splash.actions.create_template' + end end diff --git a/spec/features/user_managing_broadcasts_spec.rb b/spec/features/user_managing_broadcasts_spec.rb index 318697b..9be98bc 100644 --- a/spec/features/user_managing_broadcasts_spec.rb +++ b/spec/features/user_managing_broadcasts_spec.rb @@ -12,6 +12,13 @@ feature 'User managing broadcasts' do allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id')) end + scenario "splash page is shown if there are no existing streams" do + visit project_broadcasts_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content create_stream + end + scenario 'creating and deleting a broadcast', js: true do visit new_project_broadcast_path(project) @@ -131,6 +138,29 @@ feature 'User managing broadcasts' do end end end + + context 'When the user is associate' do + let(:current_user) { create(:user, :associate) } + + it 'does not show button to create new live stream' do + visit project_broadcasts_path(project) + + expect(page).to have_content schedule_demo + expect(page).not_to have_content create_stream + end + end + + context 'When the user is account manager' do + let(:current_user) { create(:user, :account_manager) } + + it 'does show button to create new live stream' do + visit project_broadcasts_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content create_stream + end + end + end private @@ -151,4 +181,12 @@ feature 'User managing broadcasts' do def switch_view_dropdown 'Switch View' end + + def schedule_demo + t 'broadcasts.splash.actions.book_demo' + end + + def create_stream + t 'broadcasts.splash.actions.create_stream' + end end diff --git a/spec/features/user_managing_misc_releases_spec.rb b/spec/features/user_managing_misc_releases_spec.rb index d2ae17e..00e8528 100644 --- a/spec/features/user_managing_misc_releases_spec.rb +++ b/spec/features/user_managing_misc_releases_spec.rb @@ -4,6 +4,34 @@ feature "User managing misc releases" do let(:current_user) { create(:user) } let(:project) { create(:project, members: current_user, account: current_user.primary_account) } + context 'when signed out' do + scenario 'creating a release for an adult', js: true do + project = create(:project, members: current_user, account: current_user.primary_account) + contract_template = create(:misc_release_contract_template, + question_1_text: "Question 1", + project: project) + + visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template) + + expect(page).to have_content("QUESTIONNAIRE") + + fill_in person_first_name_field, with: 'Jane' + fill_in person_last_name_field, with: 'Doe' + fill_in_person_address_fields + fill_in person_phone_field, with: '555-555-5555' + fill_in person_email_field, with: 'jane.doe@test.com' + fill_in question_1_field, with: "Answer 1" + drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone + draw_signature file_fixture("signature.png"), "misc_release_signature_base64" + + expect do + click_button submit_release_button + end.to change(MiscRelease, :count).by(1) + + expect(page).to have_content(successful_submission_message) + end + end + context "when signed in as account manager" do before do sign_in current_user @@ -25,6 +53,52 @@ feature "User managing misc releases" do click_link *view_release_pdf_link_for(native_release) expect(content_type).to eq('application/pdf') end + + scenario 'viewing the contract PDF' do + misc_release = create(:misc_release, + :native, + contract_template: build(:misc_release_contract_template, question_1_text: 'Q1'), + question_1_answer: 'A1', + project: project, + person_first_name: 'Jane', + person_last_name: 'Doe', + tag_list: 'Woman, Brunette', + notes: [ + build(:note, + content: 'Note 1', + user: build(:user, email: 'jane.doe@test.com'), + email: 'jane.doe@test.com', + created_at: DateTime.new(2020, 2, 21, 12, 0, 0)), + build(:note, + content: 'Note 2', + user: build(:user, email: 'john.doe@test.com'), + email: 'john.doe@test.com', + created_at: DateTime.new(2020, 2, 20, 11, 0, 0)) + ]) + + sign_in(current_user) + visit project_misc_releases_path(project) + click_link *view_release_pdf_link_for(misc_release) + + expect(content_type).to eq('application/pdf') + expect(content_disposition).to include('inline') + expect(pdf_filename).to include('doe-jane') + expect(pdf_body).to have_content('Jane Doe') + expect(pdf_body).to have_content('NOTES') + expect(pdf_body).to have_content('Note 1') + expect(pdf_body).to have_content('jane.doe@test.com') + expect(pdf_body).to have_content('2/21/20 12:00 PM') + expect(pdf_body).to have_content('Note 2') + expect(pdf_body).to have_content('john.doe@test.com') + expect(pdf_body).to have_content('2/20/20 11:00 AM') + expect(pdf_body).to have_content('TAGS') + expect(pdf_body).to have_content('Woman') + expect(pdf_body).to have_content('Brunette') + expect(pdf_body).not_to have_content('Guardian Email') + expect(pdf_body).to have_content('QUESTIONNAIRE') + expect(pdf_body).to have_content('Q1') + expect(pdf_body).to have_content('A1') + end end context "when the user is manager(project manager)" do @@ -52,4 +126,55 @@ feature "User managing misc releases" do def view_release_pdf_link_for(release) ['Download', href: misc_release_contracts_path(release, format: 'pdf')] end + + def fill_in_person_address_fields + fill_in person_address_street1_field, with: "123 Test Lane" + fill_in person_address_city_field, with: "New York" + fill_in person_address_state_field, with: "NY" + fill_in person_address_zip_field, with: '1000' + end + + def person_address_street1_field + t('helpers.label.misc_release.person_address_street1') + end + + def person_address_city_field + t('helpers.label.misc_release.person_address_city') + end + + def person_address_state_field + t('helpers.label.misc_release.person_address_state') + end + + def person_address_zip_field + t('helpers.label.misc_release.person_address_zip') + end + + def person_first_name_field + t('helpers.label.misc_release.person_first_name') + end + + def person_last_name_field + t('helpers.label.misc_release.person_last_name') + end + + def person_email_field + t('helpers.label.misc_release.person_email') + end + + def person_phone_field + t('helpers.label.misc_release.person_phone') + end + + def question_1_field + 'misc_release[question_1_answer]' + end + + def submit_release_button + t 'shared.submit_release_long' + end + + def successful_submission_message + "Your release was successfully submitted. Thank you." + end end diff --git a/spec/features/user_managing_task_requests_spec.rb b/spec/features/user_managing_task_requests_spec.rb index 80c4f1c..c40cd88 100644 --- a/spec/features/user_managing_task_requests_spec.rb +++ b/spec/features/user_managing_task_requests_spec.rb @@ -8,7 +8,14 @@ feature "User managing task requests" do sign_in current_user end + scenario "splash page is shown if there are no task requests" do + visit project_task_requests_path(project) + + expect(page).to have_content schedule_demo + end + scenario "task requests table is visible" do + create(:task_request, project: project, description: 'Short Desc') visit project_task_requests_path(project) expect(page).to have_content "Created On" @@ -19,10 +26,6 @@ feature "User managing task requests" do end scenario "sees list of task requests" do - visit project_task_requests_path(project) - - expect(page).to have_content no_task_requests_label - task_request = create(:task_request, project: project) visit project_task_requests_path(project) @@ -113,4 +116,8 @@ feature "User managing task requests" do def long_description_text 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' end + + def schedule_demo + t 'task_requests.splash.actions.book_demo' + end end diff --git a/spec/features/user_managing_videos_spec.rb b/spec/features/user_managing_videos_spec.rb index 9dcdfa4..ca5bec6 100644 --- a/spec/features/user_managing_videos_spec.rb +++ b/spec/features/user_managing_videos_spec.rb @@ -1,8 +1,8 @@ require "rails_helper" feature "User managing videos" do - let(:current_user) { create(:user) } - let(:project) { create(:project, account: current_user.primary_account) } + let(:current_user) { create(:user, :manager) } + let(:project) { create(:project, members: current_user, account: current_user.primary_account) } let!(:video) do create(:video, :with_graphics_only_edl_file, @@ -17,6 +17,14 @@ feature "User managing videos" do sign_in current_user end + scenario "splash page is shown if there are no existing videos" do + Video.delete_all + visit project_videos_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content upload_new_video + end + scenario "creating a video", js: true do visit project_videos_path(project) click_link "Upload New Video" @@ -96,6 +104,30 @@ feature "User managing videos" do expect(page).to have_content("Second Video") end + context 'When the user is associate' do + let(:current_user) { create(:user, :associate) } + + it 'does show button to upload new video' do + Video.delete_all + visit project_videos_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content upload_new_video + end + end + + context 'When the user is account manager' do + let(:current_user) { create(:user, :account_manager) } + + it 'does show button to upload new video' do + Video.delete_all + visit project_videos_path(project) + + expect(page).to have_content schedule_demo + expect(page).to have_content upload_new_video + end + end + private def fill_in_video_fields(data) @@ -115,4 +147,12 @@ feature "User managing videos" do def update_video_notice t "videos.update.notice" end + + def schedule_demo + t 'videos.splash.actions.book_demo' + end + + def upload_new_video + t 'videos.splash.actions.upload_video' + end end diff --git a/spec/models/contract_template_spec.rb b/spec/models/contract_template_spec.rb index 834ac9a..a5553a8 100644 --- a/spec/models/contract_template_spec.rb +++ b/spec/models/contract_template_spec.rb @@ -43,4 +43,16 @@ describe ContractTemplate do expect(contract_template).to be_duplicated end end + + describe '#has_questionnaire?' do + it 'returns true if there are any questions present' do + contract_template = build(:contract_template) + + expect(contract_template).not_to have_questionnaire + + contract_template.question_1_text = 'Q1' + + expect(contract_template).to have_questionnaire + end + end end