Upstream sync

This commit is contained in:
Senad Uka
2020-09-16 05:39:08 +02:00
parent 5cf7be6f13
commit 28e0eb36b7
61 changed files with 419 additions and 268 deletions

View File

@@ -0,0 +1,7 @@
$(document).on("turbolinks:load", function() {
bsCustomFileInput.init();
})
$(document).on("turbolinks:load", function() {
$(".toast").toast('show');
})

View File

@@ -43,6 +43,7 @@ $(document).on "turbolinks:load", ->
$(".flash-message").html data.flash_content $(".flash-message").html data.flash_content
$("#broadcast_recordings").html data.recordings_content $("#broadcast_recordings").html data.recordings_content
$("#broadcast_recordings_nav").html data.recordings_nav_content $("#broadcast_recordings_nav").html data.recordings_nav_content
$(".toast").toast('show')
refreshBroadcastFilesTab: (data) -> refreshBroadcastFilesTab: (data) ->
$("#broadcast_file_list_#{data.broadcast_token}").html data.files_content $("#broadcast_file_list_#{data.broadcast_token}").html data.files_content

View File

@@ -23,3 +23,4 @@ $(document).on "turbolinks:load", ->
showDownloadStatusUpdate: (content) -> showDownloadStatusUpdate: (content) ->
$(".flash-message").html content $(".flash-message").html content
$(".toast").toast('show')

View File

@@ -1,3 +0,0 @@
$(document).on("turbolinks:load", function() {
bsCustomFileInput.init()
})

View File

@@ -495,3 +495,30 @@ trix-toolbar {
.playing-highlight { .playing-highlight {
background-color: scale-color($primary, $lightness: 80%); background-color: scale-color($primary, $lightness: 80%);
} }
// Toast min width and border radius
.toast-min-w-border-radius {
min-width: 18rem;
border-radius: 0.8rem;
}
// Toast left border primary
.toast-border-left-primary {
border-left: 8px solid $primary;
}
// Toast left border danger
.toast-border-left-danger {
border-left: 8px solid $danger;
}
// Change link color to primary on toast notifications
.toast {
a {
color: $primary;
}
a.btn {
color: white;
}
}

View File

@@ -1,34 +0,0 @@
class BroadcastRecordingStarringsController < ApplicationController
layout "project"
before_action :set_project
before_action :set_broadcast
before_action :set_recording
def create
@recording.toggle_star
set_recordings
end
private
def broadcast_recording_params
params.require(:broadcast_recording).permit(:name, :description)
end
def set_project
@project = policy_scope(Project).find(params[:project_id])
end
def set_broadcast
@broadcast = authorize policy_scope(@project.broadcasts).find(params[:broadcast_id])
end
def set_recording
@recording = authorize policy_scope(@broadcast.broadcast_recordings).find(params[:broadcast_recording_id])
end
def set_recordings
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
end
end

View File

@@ -5,14 +5,6 @@ class BroadcastRecordingsController < ApplicationController
before_action :set_broadcast before_action :set_broadcast
before_action :set_recording before_action :set_recording
def edit
end
def update
@recording.update(broadcast_recording_params)
set_recordings
end
def destroy def destroy
@recording.update(hidden: true) @recording.update(hidden: true)
set_recordings set_recordings
@@ -20,10 +12,6 @@ class BroadcastRecordingsController < ApplicationController
private private
def broadcast_recording_params
params.require(:broadcast_recording).permit(:name, :description)
end
def set_project def set_project
@project = policy_scope(Project).find(params[:project_id]) @project = policy_scope(Project).find(params[:project_id])
end end

View File

@@ -0,0 +1,24 @@
class Public::BroadcastRecordingStarringsController < Public::BaseController
skip_after_action :verify_authorized
before_action :set_broadcast
before_action :set_recording
def create
@recording.toggle_star
set_recordings
end
private
def set_broadcast
@broadcast = Broadcast.find_by_token(params[:broadcast_token])
end
def set_recording
@recording = @broadcast.broadcast_recordings.find(params[:broadcast_recording_id])
end
def set_recordings
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
end
end

View File

@@ -0,0 +1,31 @@
class Public::BroadcastRecordingsController < Public::BaseController
skip_after_action :verify_authorized
before_action :set_broadcast, only: [:edit, :update]
before_action :set_recording, only: [:edit, :update]
def edit
end
def update
@recording.update(broadcast_recording_params)
set_recordings
end
private
def broadcast_recording_params
params.require(:broadcast_recording).permit(:name, :description)
end
def set_broadcast
@broadcast = Broadcast.find_by_token(params[:broadcast_token])
end
def set_recording
@recording = @broadcast.broadcast_recordings.find(params[:id])
end
def set_recordings
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
end
end

View File

@@ -2,7 +2,7 @@ class VideoAnalyses::AcquiredMediaReleasesController < ApplicationController
before_action :set_video before_action :set_video
def index def index
@acquired_media_file_infos = filtered_file_infos @acquired_media_files = filtered_files
end end
private private
@@ -15,12 +15,12 @@ class VideoAnalyses::AcquiredMediaReleasesController < ApplicationController
params[:query] params[:query]
end end
def filtered_file_infos def filtered_files
releasables = policy_scope(@video.acquired_media_releases) releasables = policy_scope(@video.acquired_media_releases)
results = FileInfo.where(releasable: releasables) results = ActiveStorage::Attachment.where(record: releasables, name: "files")
if query_param.present? if query_param.present?
results = results.search_filename(query_param) results = results.joins(:blob).where("active_storage_blobs.filename ILIKE ?", "%#{query_param}%")
end end
results results

View File

@@ -74,6 +74,7 @@ class VideoReleaseConfirmationsController < ApplicationController
params.require(:video_release_confirmation).permit( params.require(:video_release_confirmation).permit(
:time_elapsed, :time_elapsed,
:file_info_id, :file_info_id,
:file_id,
:channel, :channel,
:timecode_in, :timecode_in,
:timecode_out, :timecode_out,

View File

@@ -18,7 +18,7 @@ class ContractTemplate < ApplicationRecord
has_many :medical_releases, dependent: :restrict_with_error has_many :medical_releases, dependent: :restrict_with_error
has_many :misc_releases, dependent: :restrict_with_error has_many :misc_releases, dependent: :restrict_with_error
monetize :fee_cents monetize :fee_old_cents
has_rich_text :body has_rich_text :body
has_rich_text :guardian_clause has_rich_text :guardian_clause
has_rich_text :signature_legal_text has_rich_text :signature_legal_text
@@ -29,7 +29,7 @@ class ContractTemplate < ApplicationRecord
validates :name, presence: true validates :name, presence: true
validates :release_type, presence: true validates :release_type, presence: true
validates :fee_cents, numericality: { validates :fee_old_cents, numericality: {
greater_than_or_equal_to: 0, greater_than_or_equal_to: 0,
less_than_or_equal_to: 99_999_999_99 less_than_or_equal_to: 99_999_999_99
} }
@@ -50,7 +50,11 @@ class ContractTemplate < ApplicationRecord
enum accessibility: [:public_template, :private_template] enum accessibility: [:public_template, :private_template]
def fee? def fee?
!fee.zero? fee.present?
end
def fee_old?
!fee_old.zero?
end end
def releases def releases

View File

@@ -9,6 +9,10 @@ class VideoReleaseConfirmation < ApplicationRecord
Timecode.from_seconds(time_elapsed.to_f).to_s Timecode.from_seconds(time_elapsed.to_f).to_s
end end
def file
ActiveStorage::Attachment.find(file_id)
end
private private
class ReleaseRankOrder class ReleaseRankOrder

View File

@@ -1,5 +1,22 @@
<% if flash.alert.present? %> <!-- Wrapping element flash message-->
<div class="alert alert-danger text-center text-md-left"><%= flash.alert.html_safe %></div> <div class="position-relative" style="z-index: 9999;">
<% elsif flash.notice.present? %> <!-- Position toasts -->
<div class="alert alert-primary text-center text-md-left"><%= flash.notice.html_safe %></div> <div class="position-absolute" style="top: 0.5rem; right: 0.5rem;">
<% end %> <% if flash.alert.present? %>
<div class="toast fade show bg-black text-white toast-min-w-border-radius" data-autohide="false">
<div class="toast-body toast-border-left-danger">
<button type="button" class="close text-white ml-2" data-dismiss="toast">&times;</button>
<p><%= flash.alert.html_safe %></p>
</div>
</div>
<% elsif flash.notice.present? %>
<div class="toast fade show bg-black text-white toast-min-w-border-radius" data-autohide="false">
<div class="toast-body toast-border-left-primary">
<button type="button" class="close text-white ml-2" data-dismiss="toast">&times;</button>
<p><%= flash.notice.html_safe %></p>
</div>
</div>
<% end %>
</div>
</div>

View File

@@ -1 +0,0 @@
<%= render("broadcast_recordings/refresh_recordings_list") %>

View File

@@ -2,7 +2,7 @@
<% recordings.each do |recording| %> <% recordings.each do |recording| %>
<li class="media p-3"> <li class="media p-3">
<% if policy(BroadcastRecording).update? %> <% if policy(BroadcastRecording).update? %>
<%= link_to fa_icon("#{recording.starred ? 'star' : 'star-o'} fw"), [broadcast.project, broadcast, recording, :broadcast_recording_starrings], method: :post, class: "text-warning mr-2", remote: true %> <%= link_to fa_icon("#{recording.starred ? 'star' : 'star-o'} fw"), broadcast_broadcast_recording_broadcast_recording_starrings_path(broadcast.token, recording), method: :post, class: "text-warning mr-3", remote: true %>
<% end %> <% end %>
<div class="play-thumbnail"> <div class="play-thumbnail">
@@ -18,7 +18,7 @@
</div> </div>
<% if policy(BroadcastRecording).edit? %> <% if policy(BroadcastRecording).edit? %>
<%= link_to fa_icon('edit'), [:edit, broadcast.project, broadcast, recording], class: "mr-3", remote: true %> <%= link_to fa_icon('edit'), edit_broadcast_broadcast_recording_path(broadcast.token, recording), remote: true %>
<% end %> <% end %>
<%= link_to(fa_icon('download'), recording.download_url, target: "_blank") %> <%= link_to(fa_icon('download'), recording.download_url, target: "_blank") %>

View File

@@ -1,5 +1,5 @@
<% if broadcast.director_mode_video_embed.present? && params[:director_mode].present? %> <% if broadcast.director_mode_video_embed.present? && params[:non_director_mode].nil? %>
<div class="embed-responsive-item" data-video-type="stream"> <div id="director_broadcast_video" class="embed-responsive-item" data-video-type="stream">
<%= raw broadcast.director_mode_video_embed %> <%= raw broadcast.director_mode_video_embed %>
</div> </div>
<% elsif broadcast.streamer_recording? && broadcast.active? %> <% elsif broadcast.streamer_recording? && broadcast.active? %>

View File

@@ -41,17 +41,17 @@
<%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", data: { behavior: "play_stream"}, class: "dropdown-item active" %> <%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", data: { behavior: "play_stream"}, class: "dropdown-item active" %>
<% @multi_view_broadcasts.each do |broadcast| %> <% @multi_view_broadcasts.each do |broadcast| %>
<% if broadcast.id != @broadcast.id %> <% if broadcast.id != @broadcast.id %>
<% if params[:director_mode] %> <% if params[:non_director_mode] %>
<% if controller.class.module_parent.to_s == "Public" %> <% if controller.class.module_parent.to_s == "Public" %>
<%= link_to broadcast.name.titleize, url_for(params.permit!.merge(director_mode: true, token: broadcast.token)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %> <%= link_to broadcast.name.titleize, url_for(params.permit!.merge(non_director_mode: true, token: broadcast.token)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
<% else %> <% else %>
<%= link_to broadcast.name.titleize, url_for(params.permit!.merge(director_mode: true, id: broadcast.id)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %> <%= link_to broadcast.name.titleize, url_for(params.permit!.merge(non_director_mode: true, id: broadcast.id)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
<% end %> <% end %>
<% else %> <% else %>
<% if controller.class.module_parent.to_s == "Public" %> <% if controller.class.module_parent.to_s == "Public" %>
<%= link_to broadcast.name.titleize, url_for(params.permit!.merge(token: broadcast.token).except(:director_mode)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %> <%= link_to broadcast.name.titleize, url_for(params.permit!.merge(token: broadcast.token).except(:non_director_mode)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
<% else %> <% else %>
<%= link_to broadcast.name.titleize, url_for(params.permit!.merge(id: broadcast.id).except(:director_mode)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %> <%= link_to broadcast.name.titleize, url_for(params.permit!.merge(id: broadcast.id).except(:non_director_mode)), data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
<% end %> <% end %>
<% end %> <% end %>
<% end %> <% end %>
@@ -59,18 +59,18 @@
</div> </div>
</div> </div>
<% if @broadcast.director_mode_video_embed.present? %> <% if @broadcast.director_mode_video_embed.present? %>
<% if params[:director_mode] %> <% if params[:non_director_mode] %>
<div class="custom-control custom-switch ml-auto"> <div class="custom-control custom-switch ml-auto">
<input type="checkbox" name="director_mode" value="true" class="custom-control-input" id="director_mode_switch" checked="checked" /> <input type="checkbox" name="non_director_mode" value="true" class="custom-control-input" id="director_mode_switch" />
<label class="custom-control-label text-white override-custom-control-label" for="director_mode_switch">Director Mode</label> <label class="custom-control-label text-white override-custom-control-label" for="director_mode_switch">Director Mode</label>
</div> </div>
<%= link_to "Disable Director Mode", url_for(params.permit!.except(:director_mode)), class: "d-none", id: "director_mode_link" %> <%= link_to "Enable Director Mode", url_for(params.permit!.except(:non_director_mode)), class: "d-none", id: "director_mode_link" %>
<% else %> <% else %>
<div class="custom-control custom-switch ml-auto"> <div class="custom-control custom-switch ml-auto">
<input type="checkbox" name="director_mode" value="true" class="custom-control-input" id="director_mode_switch" /> <input type="checkbox" name="non_director_mode" value="true" class="custom-control-input" id="director_mode_switch" checked="checked" />
<label class="custom-control-label text-white override-custom-control-label" for="director_mode_switch">Director Mode</label> <label class="custom-control-label text-white override-custom-control-label" for="director_mode_switch">Director Mode</label>
</div> </div>
<%= link_to "Enable Director Mode", url_for(params.permit!.merge(director_mode: true)), class: "d-none", id: "director_mode_link" %> <%= link_to "Disable Director Mode", url_for(params.permit!.merge(non_director_mode: true)), class: "d-none", id: "director_mode_link" %>
<% end %> <% end %>
<% end %> <% end %>
</div> </div>
@@ -133,6 +133,21 @@
<div id="live_take"> <div id="live_take">
<%= render partial: 'broadcasts/live_take', locals: { broadcast: @broadcast } %> <%= render partial: 'broadcasts/live_take', locals: { broadcast: @broadcast } %>
</div> </div>
<% if params[:non_director_mode] %>
<% if controller.class.module_parent.to_s == "Public" %>
<%= link_to "Play #{@broadcast.name.titleize}", url_for(params.permit!.merge(non_director_mode: true, token: @broadcast.token)), data: { behavior: "play_stream"}, class: "mt-2 btn btn-primary" %>
<% else %>
<%= link_to "Play #{@broadcast.name.titleize}", url_for(params.permit!.merge(non_director_mode: true, id: @broadcast.id)), data: { behavior: "play_stream"}, class: "mt-2 btn btn-primary" %>
<% end %>
<hr/>
<% else %>
<% if controller.class.module_parent.to_s == "Public" %>
<%= link_to "Play #{@broadcast.name.titleize}", url_for(params.permit!.merge(token: @broadcast.token).except(:non_director_mode)), data: { behavior: "play_stream"}, class: "mt-2 btn btn-primary" %>
<% else %>
<%= link_to "Play #{@broadcast.name.titleize}", url_for(params.permit!.merge(id: @broadcast.id).except(:non_director_mode)), data: { behavior: "play_stream"}, class: "mt-2 btn btn-primary" %>
<% end %>
<hr/>
<% end %>
<div id="broadcast_recordings"> <div id="broadcast_recordings">
<%= render partial: 'broadcasts/broadcast_recordings', locals: { recordings: @recordings, broadcast: @broadcast } %> <%= render partial: 'broadcasts/broadcast_recordings', locals: { recordings: @recordings, broadcast: @broadcast } %>
</div> </div>

View File

@@ -5,7 +5,7 @@
</td> </td>
<td> <td>
<% if contract_template.fee? %> <% if contract_template.fee? %>
<%= number_to_currency(contract_template.fee) %> <%= contract_template.fee %>
<% else %> <% else %>
<%= t(".no_fee") %> <%= t(".no_fee") %>
<% end %> <% end %>

View File

@@ -9,7 +9,7 @@
<%= form.radio_button :accessibility, :private_template, label: "Private" %> <%= form.radio_button :accessibility, :private_template, label: "Private" %>
</div> </div>
<div class="form-row" id="fee_field"> <div class="form-row" id="fee_field">
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %> <%= form.text_field :fee, wrapper_class: "col-sm-6" %>
</div> </div>
<% end %> <% end %>

View File

@@ -36,7 +36,7 @@
<%= description_list_pair "Filming Hours:", releasable&.filming_hours %> <%= description_list_pair "Filming Hours:", releasable&.filming_hours %>
<% end %> <% end %>
<% if contract_template.fee? %> <% if contract_template.fee? %>
<%= description_list_pair "Fee:", number_to_currency(contract_template.fee) %> <%= description_list_pair "Fee:", contract_template.fee %>
<% end %> <% end %>
<% if releasable.model_name == "MaterialRelease" %> <% if releasable.model_name == "MaterialRelease" %>
<%= description_list_pair "Description:", releasable.description %> <%= description_list_pair "Description:", releasable.description %>

View File

@@ -17,12 +17,12 @@
</head> </head>
<body> <body>
<div class="flash-message">
<%= render "flash" %>
</div>
<%= content_for?(:header) ? yield(:header) : render("header") %> <%= content_for?(:header) ? yield(:header) : render("header") %>
<%= render "masquerade" if masquerading? %> <%= render "masquerade" if masquerading? %>
<main class="container-fluid py-3"> <main class="container-fluid py-3">
<div class="flash-message"></div>
<%= render "flash" %>
</div>
<%= content_for?(:content) ? yield(:content) : yield %> <%= content_for?(:content) ? yield(:content) : yield %>
</main> </main>
</body> </body>

View File

@@ -6,7 +6,7 @@
<p><%= @contract_template.body %></p> <p><%= @contract_template.body %></p>
<% if @contract_template.fee? %> <% if @contract_template.fee? %>
<p> <p>
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span> Fee <span class="font-weight-bold text-success"><%= @contract_template.fee %></span>
</p> </p>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -7,7 +7,7 @@
<p><%= @contract_template.body %></p> <p><%= @contract_template.body %></p>
<% if @contract_template.fee? %> <% if @contract_template.fee? %>
<p> <p>
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span> Fee <span class="font-weight-bold text-success"><%= @contract_template.fee %></span>
</p> </p>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -7,7 +7,7 @@
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<%= bootstrap_form_with model: [broadcast.project, broadcast, recording], layout: :horizontal, label_col: "col-3", control_col: "col-9" do |form| %> <%= bootstrap_form_with model: [broadcast, recording], url: broadcast_broadcast_recording_path(broadcast.token, recording), layout: :horizontal, label_col: "col-3", control_col: "col-9" do |form| %>
<div class="modal-body"> <div class="modal-body">
<div id="broadcast_recording_fields"> <div id="broadcast_recording_fields">
<%= form.text_field :name %> <%= form.text_field :name %>

View File

@@ -0,0 +1,11 @@
$('[data-id="<%= dom_id(@recording) %>"]').remove();
<% if @recordings.empty? %>
$("#broadcast_recordings_nav").append('<p class="dropdown-item text-muted">Recordings will appear here</p>')
<% end %>
$("#broadcast_recordings").html("<%= j render(partial: 'broadcasts/broadcast_recordings', locals: { recordings: @recordings, broadcast: @broadcast }) %>");
// Close and remove the modal
$("#edit_broadcast_recording_modal").on("hidden.bs.modal", function (e) {
$("#edit_broadcast_recording_modal").remove();
});
$("#edit_broadcast_recording_modal").modal("hide");

View File

@@ -2,5 +2,5 @@
$("#edit_broadcast_recording_modal").remove(); $("#edit_broadcast_recording_modal").remove();
<% # Create and show the modal %> <% # Create and show the modal %>
$("body").append("<%= j render(partial: 'edit_broadcast_recording_modal', locals: { project: @project, broadcast: @broadcast, recording: @recording }) %>"); $("body").append("<%= j render(partial: 'edit_broadcast_recording_modal', locals: { broadcast: @broadcast, recording: @recording }) %>");
$("#edit_broadcast_recording_modal").modal("toggle"); $("#edit_broadcast_recording_modal").modal("toggle");

View File

@@ -0,0 +1 @@
<%= render("public/broadcast_recordings/refresh_recordings_list") %>

View File

@@ -6,7 +6,7 @@
<p><%= @contract_template.body %></p> <p><%= @contract_template.body %></p>
<% if @contract_template.fee? %> <% if @contract_template.fee? %>
<p> <p>
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span> Fee <span class="font-weight-bold text-success"><%= @contract_template.fee %></span>
</p> </p>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -6,7 +6,7 @@
<p><%= @contract_template.body %></p> <p><%= @contract_template.body %></p>
<% if @contract_template.fee? %> <% if @contract_template.fee? %>
<p> <p>
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span> Fee <span class="font-weight-bold text-success"><%= @contract_template.fee %></span>
</p> </p>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -7,7 +7,7 @@
<%= @contract_template.body %> <%= @contract_template.body %>
<% if @contract_template.fee? %> <% if @contract_template.fee? %>
<p> <p>
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span> Fee <span class="font-weight-bold text-success"><%= @contract_template.fee %></span>
</p> </p>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -7,7 +7,7 @@
<p><%= @contract_template.body %></p> <p><%= @contract_template.body %></p>
<% if @contract_template.fee? %> <% if @contract_template.fee? %>
<p> <p>
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span> Fee <span class="font-weight-bold text-success"><%= @contract_template.fee %></span>
</p> </p>
<% end %> <% end %>
<% end %> <% end %>

View File

@@ -1,7 +1,7 @@
<% if acquired_media_file_infos.any? %> <% if acquired_media_files.any? %>
<% acquired_media_file_infos.each do |file_info| %> <% acquired_media_files.each do |file| %>
<li class="acquired-media-releasable list-inline-item" data-ujs-target="<%= dom_id(file_info.releasable, dom_id(file_info)) %>" data-hidden="false"> <li class="acquired-media-releasable list-inline-item" data-ujs-target="<%= dom_id(file.record, dom_id(file)) %>" data-hidden="false">
<%= render "video_analyses/file_info_releasable", releasable: file_info.releasable, video: video, file_info: file_info %> <%= render "video_analyses/file_releasable", releasable: file.record, video: video, file: file %>
</li> </li>
<% end %> <% end %>
<% else %> <% else %>

View File

@@ -1,7 +1,7 @@
<% if acquired_media_release.file_infos.any? %> <% if acquired_media_release.files.any? %>
<% acquired_media_release.file_infos.each do |file_info| %> <% acquired_media_release.files.each do |file| %>
<li class="acquired-media-releasable list-inline-item" data-ujs-target="<%= dom_id(acquired_media_release, "file_info_#{file_info.id}") %>" data-confirmed="<%= video.has_confirmed_release?(acquired_media_release) && video.video_release_confirmations.any? { |video_release_confirmation| video_release_confirmation.file_info_id == file_info.id } %>" data-hidden="false"> <li class="acquired-media-releasable list-inline-item" data-ujs-target="<%= dom_id(acquired_media_release, "attachment_#{file.id}") %>" data-confirmed="<%= video.has_confirmed_release?(acquired_media_release) && video.video_release_confirmations.any? { |video_release_confirmation| video_release_confirmation.file_id == file.id } %>" data-hidden="false">
<%= render "video_analyses/file_info_releasable", releasable: acquired_media_release, video: video, file_info: file_info %> <%= render "video_analyses/file_releasable", releasable: acquired_media_release, video: video, file: file %>
</li> </li>
<% end %> <% end %>
<% else %> <% else %>

View File

@@ -1,8 +0,0 @@
<%= button_to_video_release_confirmation video, releasable, additional_video_release_params: { file_info_id: file_info.id } do %>
<figure class="figure mb-0">
<div class="figure-img border text-muted d-flex justify-content-center align-items-center text-wrap text-break" style="width:200px;height:200px;">
<%= file_info.filename %>
</div>
<figcaption class="figure-caption text-center"><%= truncate releasable.name, length: 25 %></figcaption>
</figure>
<% end %>

View File

@@ -0,0 +1,12 @@
<%= button_to_video_release_confirmation video, releasable, additional_video_release_params: { file_id: file.id } do %>
<figure class="figure mb-0">
<% if file.content_type.include? "image" %>
<%= image_tag large_variant(file), class: "figure-img border", style: "width:200px;height:200px;" %>
<% else %>
<div class="figure-img border text-muted d-flex justify-content-center align-items-center text-wrap text-break" style="width:200px;height:200px;">
<%= file.filename %>
</div>
<% end %>
<figcaption class="figure-caption text-center"><%= truncate releasable.name, length: 25 %></figcaption>
</figure>
<% end %>

View File

@@ -1,3 +1,18 @@
<li class="releasable list-inline-item hidden-when-confirmed" id="<%= dom_id(material_release) %>" data-confirmed="<%= video.confirmed_material_releases.include?(material_release) %>" data-hidden="<%= video.confirmed_material_releases.include?(material_release) %>"> <% if material_release.files.any? %>
<%= render "video_analyses/releasable", releasable: material_release, video: video %> <% material_release.files.each do |file| %>
</li> <li class="releasable list-inline-item hidden-when-confirmed" id="<%= dom_id(material_release) %>" data-ujs-target="<%= dom_id(material_release, "attachment_#{file.id}") %>" data-confirmed="<%= video.confirmed_material_releases.include?(material_release) %>" data-hidden="<%= video.confirmed_material_releases.include?(material_release) %>">
<%= render "video_analyses/file_releasable", releasable: material_release, video: video, file: file %>
</li>
<% end %>
<% else %>
<li class="releasable list-inline-item" data-confirmed="false" data-hidden="false">
<figure class="figure mb-0">
<div class="figure-img border text-muted d-flex justify-content-center align-items-center" style="width:200px;height:200px;">
<small>No File Uploaded</small>
</div>
<figcaption class="figure-caption text-center"><%= truncate material_release.name, length: 25 %></figcaption>
</figure>
</li>
<% end %>

View File

@@ -22,8 +22,8 @@
<td><a data-behavior="seekable-timecode"><%= confirmation.appears_at %></a></td> <td><a data-behavior="seekable-timecode"><%= confirmation.appears_at %></a></td>
<td><%= confirmation.releasable.name %></td> <td><%= confirmation.releasable.name %></td>
<td> <td>
<% if confirmation.file_info.present? %> <% if confirmation.file_id.present? %>
<%= confirmation.file_info.filename %></div> <%= confirmation.file.filename %></div>
<% elsif confirmation.releasable.respond_to?(:photo) && confirmation.releasable.photo.attached? %> <% elsif confirmation.releasable.respond_to?(:photo) && confirmation.releasable.photo.attached? %>
<%= image_tag thumbnail_variant(confirmation.releasable.photo), class: "img-fluid figure-img" %> <%= image_tag thumbnail_variant(confirmation.releasable.photo), class: "img-fluid figure-img" %>
<% else %> <% else %>

View File

@@ -2,7 +2,7 @@
$("#acquired_media_releases [data-toggle=tooltip]").tooltip("dispose"); $("#acquired_media_releases [data-toggle=tooltip]").tooltip("dispose");
// Update the release list // Update the release list
$("#acquired_media_releases").html("<%= j render("video_analyses/acquired_media_file_infos", acquired_media_file_infos: @acquired_media_file_infos, video: @video) %>"); $("#acquired_media_releases").html("<%= j render("video_analyses/acquired_media_files", acquired_media_files: @acquired_media_files, video: @video) %>");
// # Reset the search form // # Reset the search form
$("#acquired_media_releases_section form input[name='query']").val("<%= params[:query] %>"); $("#acquired_media_releases_section form input[name='query']").val("<%= params[:query] %>");

View File

@@ -14,7 +14,7 @@
<div id="video_release_confirmation_fields"> <div id="video_release_confirmation_fields">
<%= form.hidden_field :time_elapsed, value: video_release_confirmation.time_elapsed %> <%= form.hidden_field :time_elapsed, value: video_release_confirmation.time_elapsed %>
<%= form.hidden_field :file_info_id, value: video_release_confirmation.file_info_id %> <%= form.hidden_field :file_id, value: video_release_confirmation.file_id %>
<%= form.static_control nil, name: nil, label: "Video Timecode", value: video_release_confirmation.appears_at %> <%= form.static_control nil, name: nil, label: "Video Timecode", value: video_release_confirmation.appears_at %>
<%= form.text_field :channel %> <%= form.text_field :channel %>
<%= form.text_field :timecode_in %> <%= form.text_field :timecode_in %>

View File

@@ -1,8 +1,8 @@
var hideConfirmed = $("input[name=hide_confirmed]:checked").length > 0; var hideConfirmed = $("input[name=hide_confirmed]:checked").length > 0;
// Mark the release as confirmed // Mark the release as confirmed
if (<%= @releasable.respond_to?(:file_infos) %>) { if (<%= @releasable.respond_to?(:files) %>) {
$("[data-ujs-target=<%= dom_id(@releasable, "file_info_#{@video_release_confirmation.file_info_id}") %>]").attr("data-confirmed", true).data("confirmed", true) $("[data-ujs-target=<%= dom_id(@releasable, "attachment_#{@video_release_confirmation.file_id}") %>]").attr("data-confirmed", true).data("confirmed", true)
} else { } else {
$("#<%= dom_id(@releasable) %>").attr("data-confirmed", true).data("confirmed", true) $("#<%= dom_id(@releasable) %>").attr("data-confirmed", true).data("confirmed", true)
} }

View File

@@ -1,7 +1,7 @@
// Mark the release as no longer confirmed and show // Mark the release as no longer confirmed and show
if (<%= @releasable.respond_to?(:file_infos) && @video_release_confirmation.respond_to?(:file_info_id) %>) { if (<%= @releasable.respond_to?(:files) && @video_release_confirmation.respond_to?(:file_id) %>) {
if (<%= @video_release_confirmations.none? { |video_release_confirmation| video_release_confirmation.respond_to?(:file_info_id) && video_release_confirmation.file_info_id == @video_release_confirmation.file_info_id } %>) { if (<%= @video_release_confirmations.none? { |video_release_confirmation| video_release_confirmation.respond_to?(:file_id) && video_release_confirmation.file_id == @video_release_confirmation.file_id } %>) {
$("[data-ujs-target=<%= dom_id(@releasable, "file_info_#{@video_release_confirmation.file_info_id}") %>]") $("[data-ujs-target=<%= dom_id(@releasable, "attachment_#{@video_release_confirmation.file_id}") %>]")
.attr("data-confirmed", false).data("confirmed", false) .attr("data-confirmed", false).data("confirmed", false)
.attr("data-hidden", false).data("hidden", false); .attr("data-hidden", false).data("hidden", false);
} }

View File

@@ -457,7 +457,7 @@ en:
help: help:
contract_template: contract_template:
amendment_clause: Leave blank if not required for this contract amendment_clause: Leave blank if not required for this contract
fee: Leave at $0.00 for no-fee fee: Please enter all necessary details about fees. Leave it blank for no-fee
guardian_clause: Leave blank if not required for this contract guardian_clause: Leave blank if not required for this contract
questionnaire_legal_text: Leave blank if not required for this contract questionnaire_legal_text: Leave blank if not required for this contract
signature_legal_text: Leave blank if not required for this contract signature_legal_text: Leave blank if not required for this contract

View File

@@ -105,9 +105,7 @@ Rails.application.routes.draw do
delete :destroy_file delete :destroy_file
end end
resource :zoom_meeting, only: [:show] resource :zoom_meeting, only: [:show]
resources :broadcast_recordings, only: [:destroy, :edit, :update] do resources :broadcast_recordings, only: [:destroy]
resources :broadcast_recording_starrings, only: :create
end
end end
resources :directories, except: [:index] do resources :directories, except: [:index] do
member do member do
@@ -152,6 +150,9 @@ Rails.application.routes.draw do
end end
resources :broadcasts, param: :token, only: [:show, :update] do resources :broadcasts, param: :token, only: [:show, :update] do
resource :zoom_meeting, only: [:show] resource :zoom_meeting, only: [:show]
resources :broadcast_recordings, only: [:edit, :update] do
resources :broadcast_recording_starrings, only: :create
end
end end
end end

View File

@@ -0,0 +1,14 @@
class SetFeeFromFeeCentsAndCurrency < ActiveRecord::DataMigration
def up
ContractTemplate.find_each do |contract_template|
if contract_template.fee_old?
fee = contract_template.fee_old.format
contract_template.update_column(:fee, fee)
end
end
end
def down
ContractTemplate.update_all(fee: nil)
end
end

View File

@@ -0,0 +1,9 @@
class AddFileIdToVideoReleaseConfirmations < ActiveRecord::Migration[6.0]
def up
add_column :video_release_confirmations, :file_id, :bigint, index: true
end
def down
remove_column :video_release_confirmations, :file_id
end
end

View File

@@ -0,0 +1,7 @@
class ConvertFeeToStringType < ActiveRecord::Migration[6.0]
def change
rename_column :contract_templates, :fee_cents, :fee_old_cents
rename_column :contract_templates, :fee_currency, :fee_old_currency
add_column :contract_templates, :fee, :string
end
end

View File

@@ -658,8 +658,8 @@ CREATE TABLE public.contract_templates (
name character varying, name character varying,
body text, body text,
guardian_clause text, guardian_clause text,
fee_cents bigint DEFAULT 0 NOT NULL, fee_old_cents bigint DEFAULT 0 NOT NULL,
fee_currency character varying DEFAULT 'USD'::character varying NOT NULL, fee_old_currency character varying DEFAULT 'USD'::character varying NOT NULL,
created_at timestamp without time zone NOT NULL, created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL,
release_type character varying, release_type character varying,
@@ -692,7 +692,8 @@ CREATE TABLE public.contract_templates (
exhibit_a_legal_text text, exhibit_a_legal_text text,
exhibit_a_question_text text, exhibit_a_question_text text,
exhibit_b_legal_text text, exhibit_b_legal_text text,
exhibit_b_question_text text exhibit_b_question_text text,
fee character varying
); );
@@ -715,6 +716,15 @@ CREATE SEQUENCE public.contract_templates_id_seq
ALTER SEQUENCE public.contract_templates_id_seq OWNED BY public.contract_templates.id; 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: - -- Name: directories; Type: TABLE; Schema: public; Owner: -
-- --
@@ -1847,7 +1857,8 @@ CREATE TABLE public.video_release_confirmations (
source_file_name character varying, source_file_name character varying,
clip_name character varying, clip_name character varying,
description character varying, description character varying,
channel character varying channel character varying,
file_id bigint
); );
@@ -2400,6 +2411,14 @@ ALTER TABLE ONLY public.contract_templates
ADD CONSTRAINT contract_templates_pkey PRIMARY KEY (id); 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: - -- Name: directories directories_pkey; Type: CONSTRAINT; Schema: public; Owner: -
-- --
@@ -3248,7 +3267,6 @@ CREATE UNIQUE INDEX index_users_on_email ON public.users USING btree (email);
CREATE UNIQUE INDEX index_users_on_password_reset_token ON public.users USING btree (password_reset_token); CREATE UNIQUE INDEX index_users_on_password_reset_token ON public.users USING btree (password_reset_token);
-- --
-- Name: index_video_release_confirmations_on_file_info_id; Type: INDEX; Schema: public; Owner: - -- Name: index_video_release_confirmations_on_file_info_id; Type: INDEX; Schema: public; Owner: -
-- --
@@ -3454,14 +3472,6 @@ ALTER TABLE ONLY public.contract_templates
ADD CONSTRAINT fk_rails_21d503cdcd FOREIGN KEY (project_id) REFERENCES public.projects(id); ADD CONSTRAINT fk_rails_21d503cdcd FOREIGN KEY (project_id) REFERENCES public.projects(id);
--
-- Name: video_release_confirmations fk_rails_2787252ceb; Type: FK CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.video_release_confirmations
ADD CONSTRAINT fk_rails_2787252ceb FOREIGN KEY (file_info_id) REFERENCES public.file_infos(id);
-- --
-- Name: medical_releases fk_rails_325442c794; Type: FK CONSTRAINT; Schema: public; Owner: - -- Name: medical_releases fk_rails_325442c794; Type: FK CONSTRAINT; Schema: public; Owner: -
-- --
@@ -4024,11 +4034,13 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200803150138'), ('20200803150138'),
('20200804093409'), ('20200804093409'),
('20200807190607'), ('20200807190607'),
('20200810185526'),
('20200811102720'), ('20200811102720'),
('20200812060406'), ('20200812060406'),
('20200819070738'), ('20200819070738'),
('20200820082501'), ('20200820082501'),
('20200824171649'), ('20200824171649'),
('20200908085319'); ('20200908085319'),
('20200914163203');

View File

@@ -12,59 +12,6 @@ RSpec.describe BroadcastRecordingsController, type: :controller do
stub_mux_live_stream stub_mux_live_stream
end end
describe "#edit" do
let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") }
let(:recording) { create(:broadcast_recording, broadcast: broadcast) }
before do
stub_mux_live_stream
end
it "assigns project, broadcast, broadcast recording" do
get :edit, params: { project_id: project, broadcast_id: broadcast, id: recording }, xhr: true
expect(assigns(:project)).to have_attributes({
id: project.id,
name: project.name,
account_id: project.account_id
})
expect(assigns(:broadcast)).to have_attributes({
id: broadcast.id,
name: broadcast.name,
project_id: project.id
})
expect(assigns(:recording)).to have_attributes({
id: recording.id,
broadcast_id: broadcast.id,
file_name: "high.mp4"
})
end
end
describe "#update" do
let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") }
let(:recording) { create(:broadcast_recording, broadcast: broadcast) }
let(:recordings) { create_list(:broadcast_recording, 5, :with_random_asset_uid, broadcast: broadcast) }
let(:starred_recordings) { create_list(:broadcast_recording, 5, :with_random_asset_uid, broadcast: broadcast, starred: true) }
before do
stub_mux_live_stream
end
it "updates the recording's name and description" do
expect(recording.name).to eq(recording.download_file_name)
expect(recording.description).to eq("No description provided for this recording.")
patch :update, params: { project_id: project, broadcast_id: broadcast, id: recording, broadcast_recording: { name: "Just for fun", description: "I had fun while making this stream." } }, xhr: true
recording.reload
expect(recording.name).to eq("Just for fun")
expect(recording.description).to eq("I had fun while making this stream.")
end
end
describe "#destroy" do describe "#destroy" do
let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") } let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") }
let(:recording) { create(:broadcast_recording, broadcast: broadcast) } let(:recording) { create(:broadcast_recording, broadcast: broadcast) }

View File

@@ -195,15 +195,15 @@ RSpec.describe BroadcastsController, type: :controller do
expect(response.body).to have_selector(".custom-control-label", text: "Director Mode") expect(response.body).to have_selector(".custom-control-label", text: "Director Mode")
end end
context "when director mode is enabled" do context "director mode is enabled by default" do
it "shows the video embed" do it "shows the video embed" do
get :show, params: { project_id: project, id: broadcast, director_mode: true } get :show, params: { project_id: project, id: broadcast }
expect(response.body).to have_selector("iframe", text: "video player") expect(response.body).to have_selector("iframe", text: "video player")
end end
it "renders the view dropdown with a director mode disable option" do it "renders the view dropdown with a director mode disable option" do
get :show, params: { project_id: project, id: broadcast, director_mode: true } get :show, params: { project_id: project, id: broadcast }
expect(response.body).to have_content broadcast.name expect(response.body).to have_content broadcast.name
expect(response.body).to have_selector(".custom-control-label", text: "Director Mode") expect(response.body).to have_selector(".custom-control-label", text: "Director Mode")

View File

@@ -1,6 +1,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe BroadcastRecordingStarringsController, type: :controller do RSpec.describe Public::BroadcastRecordingStarringsController, type: :controller do
render_views render_views
let(:user) { create(:user) } let(:user) { create(:user) }
@@ -8,7 +8,6 @@ RSpec.describe BroadcastRecordingStarringsController, type: :controller do
let(:project) { create(:project, account: user.primary_account) } let(:project) { create(:project, account: user.primary_account) }
before do before do
sign_in user
stub_mux_live_stream stub_mux_live_stream
end end
@@ -22,7 +21,7 @@ RSpec.describe BroadcastRecordingStarringsController, type: :controller do
expect(recording.starred).to be_falsey expect(recording.starred).to be_falsey
end end
post :create, params: { project_id: project, broadcast_id: broadcast, broadcast_recording_id: recordings.first.id }, xhr: true post :create, params: { broadcast_token: broadcast.token, broadcast_recording_id: recordings.first.id }, xhr: true
expect(recordings.first.reload.starred).to eq true expect(recordings.first.reload.starred).to eq true
@@ -36,7 +35,7 @@ RSpec.describe BroadcastRecordingStarringsController, type: :controller do
expect(recording.starred).to be_truthy expect(recording.starred).to be_truthy
end end
post :create, params: { project_id: project, broadcast_id: broadcast, broadcast_recording_id: starred_recordings.first.id }, xhr: true post :create, params: { broadcast_token: broadcast.token, broadcast_recording_id: starred_recordings.first.id }, xhr: true
expect(starred_recordings.first.reload.starred).to eq false expect(starred_recordings.first.reload.starred).to eq false

View File

@@ -0,0 +1,59 @@
require 'rails_helper'
RSpec.describe Public::BroadcastRecordingsController, type: :controller do
render_views
let(:user) { create(:user) }
let(:account) { user.primary_account }
let(:project) { create(:project, account: user.primary_account) }
before do
stub_mux_live_stream
end
describe "#edit" do
let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") }
let(:recording) { create(:broadcast_recording, broadcast: broadcast) }
before do
stub_mux_live_stream
end
it "assigns project, broadcast, broadcast recording" do
get :edit, params: { broadcast_token: broadcast.token, id: recording }, xhr: true
expect(assigns(:broadcast)).to have_attributes({
id: broadcast.id,
name: broadcast.name,
project_id: project.id
})
expect(assigns(:recording)).to have_attributes({
id: recording.id,
broadcast_id: broadcast.id,
file_name: "high.mp4"
})
end
end
describe "#update" do
let(:broadcast) { create(:broadcast, project: project, name: "New Broadcast") }
let(:recording) { create(:broadcast_recording, broadcast: broadcast) }
let(:recordings) { create_list(:broadcast_recording, 5, :with_random_asset_uid, broadcast: broadcast) }
before do
stub_mux_live_stream
end
it "updates the recording's name and description" do
expect(recording.name).to eq(recording.download_file_name)
expect(recording.description).to eq("No description provided for this recording.")
patch :update, params: { broadcast_token: broadcast.token, id: recording, broadcast_recording: { name: "Just for fun", description: "I had fun while making this stream." } }, xhr: true
recording.reload
expect(recording.name).to eq("Just for fun")
expect(recording.description).to eq("I had fun while making this stream.")
end
end
end

View File

@@ -10,7 +10,7 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
end end
describe "acquired_media_release" do describe "acquired_media_release" do
let(:acquired_media_release) { create(:acquired_media_release) } let(:acquired_media_release) { create(:acquired_media_release, :with_files) }
describe "#new" do describe "#new" do
let(:edl_event_gateway) { instance_double(EdlEventGateway) } let(:edl_event_gateway) { instance_double(EdlEventGateway) }
@@ -21,8 +21,6 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
end end
it "assigns video_release_confirmation, video, edl_events_data" do it "assigns video_release_confirmation, video, edl_events_data" do
file_info = create(:file_info)
post :new, post :new,
params: { params: {
video_id: video, video_id: video,
@@ -35,7 +33,7 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
source_file_name: nil, source_file_name: nil,
clip_name: nil, clip_name: nil,
description: nil, description: nil,
file_info_id: file_info, file_id: acquired_media_release.files.first.id,
}, },
use_route: new_video_acquired_media_release_video_release_confirmation_path(video, acquired_media_release) use_route: new_video_acquired_media_release_video_release_confirmation_path(video, acquired_media_release)
}, },
@@ -53,7 +51,7 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
source_file_name: "source_file_name", source_file_name: "source_file_name",
clip_name: "clip_name", clip_name: "clip_name",
description: "description", description: "description",
file_info_id: file_info.id, file_id: acquired_media_release.files.first.id,
}) })
expect(assigns(:video)).to have_attributes({ expect(assigns(:video)).to have_attributes({
id: video.id, id: video.id,
@@ -82,8 +80,6 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
describe "#create" do describe "#create" do
it "assigns video_release_confirmations, video_release_confirmation" do it "assigns video_release_confirmations, video_release_confirmation" do
file_info = create(:file_info)
post :create, post :create,
params: { params: {
video_id: video, video_id: video,
@@ -97,7 +93,7 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
source_file_name: "DISCLAIMER.AVI", source_file_name: "DISCLAIMER.AVI",
clip_name: "DISCLAIMER.AVI.NEW.02", clip_name: "DISCLAIMER.AVI.NEW.02",
description: "Boat", description: "Boat",
file_info_id: file_info, file_id: acquired_media_release.files.first.id,
}, },
use_route: video_acquired_media_release_video_release_confirmations_path(video, acquired_media_release) use_route: video_acquired_media_release_video_release_confirmations_path(video, acquired_media_release)
}, },
@@ -112,7 +108,7 @@ RSpec.describe VideoReleaseConfirmationsController, type: :controller do
source_file_name: "DISCLAIMER.AVI", source_file_name: "DISCLAIMER.AVI",
clip_name: "DISCLAIMER.AVI.NEW.02", clip_name: "DISCLAIMER.AVI.NEW.02",
description: "Boat", description: "Boat",
file_info_id: file_info.id, file_id: acquired_media_release.files.first.id,
}) })
end end

View File

@@ -44,6 +44,16 @@ FactoryBot.define do
guardian_2_phone "2222" guardian_2_phone "2222"
end end
trait :with_files do
files do
[
Rack::Test::UploadedFile.new('spec/fixtures/files/contract.pdf', 'application/pdf'),
Rack::Test::UploadedFile.new('spec/fixtures/files/audio.mp3', 'audio/mpeg'),
Rack::Test::UploadedFile.new('spec/fixtures/files/video_file.mp4', 'video/mp4')
]
end
end
factory :acquired_media_release_with_contract_template do factory :acquired_media_release_with_contract_template do
after(:build) do |acquired_media_release, _| after(:build) do |acquired_media_release, _|
acquired_media_release.contract_template = build(:acquired_media_release_contract_template) acquired_media_release.contract_template = build(:acquired_media_release_contract_template)

View File

@@ -205,34 +205,6 @@ RSpec.feature 'User manages contract templates', type: :feature do
expect(pdf_body).to have_content('Guardian') expect(pdf_body).to have_content('Guardian')
end end
context 'preventing creation of release template with wrong fee value' do
before do
visit new_project_contract_template_path(project)
fill_in 'Name', with: 'My Release Template'
select 'Appearance Release', from: 'Release type'
fill_in_trix body_field, with: 'You agree to this release.'
fill_hidden guardian_clause_field, with: 'Your minor agrees to this release.'
select 'All', from: 'Applicable Media'
select 'Other', from: 'Territory'
fill_in 'Describe other territory', with: 'North America only'
select 'In perpetuity', from: 'Term'
select 'None', from: 'Restriction'
end
scenario 'Should not allow negative fees' do
fill_in 'Fee', with: '-200'
click_on create_release_template_button
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_button
expect(page).not_to have_content(create_contract_template_success_message)
end
end
scenario 'contract template preview is shown before printing' do scenario 'contract template preview is shown before printing' do
create(:appearance_release_contract_template, body: 'Contract legal language', project: project) create(:appearance_release_contract_template, body: 'Contract legal language', project: project)
visit project_contract_templates_path(project) visit project_contract_templates_path(project)

View File

@@ -186,6 +186,30 @@ feature 'User managing broadcasts' do
expect(page).not_to have_selector("li.media.playing-highlight") expect(page).not_to have_selector("li.media.playing-highlight")
end end
scenario 'opening broadcast page starts in normal mode if director mode is not available' do
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
broadcast.director_mode_video_embed = nil
broadcast.save
visit project_broadcast_path(project, broadcast)
expect(page).not_to have_selector('#director_broadcast_video')
expect(page).to have_selector('#broadcast_video')
expect(page).not_to have_selector('#director_mode_switch')
end
scenario 'opening broadcast page starts in director mode if available' do
broadcast = create(:broadcast, :with_stream, :with_files, project: project, director_mode_video_embed: 'director_mode')
visit project_broadcast_path(project, broadcast)
expect(page).not_to have_selector('#broadcast_video')
expect(page).to have_selector('#director_broadcast_video')
expect(page).to have_selector('#director_mode_switch')
end
context 'When the user is associate' do context 'When the user is associate' do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }

View File

@@ -83,11 +83,7 @@ feature "User performs video analysis" do
create(:material_release, name: "Apple MacBook Air", project: project), create(:material_release, name: "Apple MacBook Air", project: project),
create(:material_release, name: "Microsoft Surface Pro", project: project) create(:material_release, name: "Microsoft Surface Pro", project: project)
] ]
acquired_media = create(:acquired_media_release, project: project) acquired_media = create(:acquired_media_release, :with_files, project: project)
acquired_file_info_1, acquired_file_info_2 = [
create(:file_info, filename: "Still Image", releasable: acquired_media),
create(:file_info, filename: "Artwork", releasable: acquired_media)
]
music_release = create(:music_release, project: project) music_release = create(:music_release, project: project)
music_file_info_1, music_file_info_2 = [ music_file_info_1, music_file_info_2 = [
create(:file_info, filename: "I'm not afraid", releasable: music_release), create(:file_info, filename: "I'm not afraid", releasable: music_release),
@@ -116,9 +112,10 @@ feature "User performs video analysis" do
end end
within "#acquired_media_releases_section" do within "#acquired_media_releases_section" do
search_for(:acquired_media_releases, text: "till") search_for(:acquired_media_releases, text: "cont")
expect(page).to have_content("Still Image") expect(page).to have_content("contract.pdf")
expect(page).not_to have_content("Artwork") expect(page).not_to have_content("audio.mp3")
expect(page).not_to have_content("video_file.mp4")
end end
within "#music_releases_section" do within "#music_releases_section" do
@@ -350,34 +347,31 @@ feature "User performs video analysis" do
end end
scenario "confirming an acquired media release", js: true do scenario "confirming an acquired media release", js: true do
acquired_media_release = create(:acquired_media_release_with_file_infos, project: project) acquired_media_release = create(:acquired_media_release, :with_files, project: project)
acquired_media_release.file_infos.first.update(filename: "shark jumping")
acquired_media_release.file_infos.second.update(filename: "pig flying")
acquired_media_release.file_infos.third.update(filename: "panda sneezing")
sign_in current_user sign_in current_user
visit video_video_analyses_path(video) visit video_video_analyses_path(video)
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "shark jumping", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "contract.pdf", count: 1)
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "pig flying", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "audio.mp3", count: 1)
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "panda sneezing", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "video_file.mp4", count: 1)
confirm_first_release_using_edl_modal(video, acquired_media_release, text: "shark jumping") confirm_first_release_using_edl_modal(video, acquired_media_release, text: "contract.pdf")
expect(page).to have_confirmed_release(acquired_media_release, text: "shark jumping") expect(page).to have_confirmed_release(acquired_media_release, text: "contract.pdf")
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "pig flying", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "audio.mp3", count: 1)
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "panda sneezing", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "video_file.mp4", count: 1)
unconfirm_release(VideoReleaseConfirmation.last) unconfirm_release(VideoReleaseConfirmation.last)
expect(page).not_to have_confirmed_release(acquired_media_release, text: "shark jumping") expect(page).not_to have_confirmed_release(acquired_media_release, text: "contract.pdf")
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "shark jumping", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "contract.pdf", count: 1)
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "pig flying", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "audio.mp3", count: 1)
expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "panda sneezing", count: 1) expect(page).to have_unconfirmed_file_info_release(acquired_media_release, "video_file.mp4", count: 1)
end end
scenario "confirming a material release", js: true do scenario "confirming a material release", js: true do
material_release = create(:material_release, project: project) material_release = create(:material_release, :with_file, project: project)
sign_in current_user sign_in current_user
visit video_video_analyses_path(video) visit video_video_analyses_path(video)
@@ -387,7 +381,6 @@ feature "User performs video analysis" do
confirm_first_release_using_edl_modal(video, material_release) confirm_first_release_using_edl_modal(video, material_release)
expect(page).to have_confirmed_release(material_release) expect(page).to have_confirmed_release(material_release)
expect(page).not_to have_unconfirmed_release(material_release)
unconfirm_release(VideoReleaseConfirmation.last) unconfirm_release(VideoReleaseConfirmation.last)

View File

@@ -22,14 +22,10 @@ describe ContractTemplate do
it { is_expected.to validate_presence_of(:release_type) } it { is_expected.to validate_presence_of(:release_type) }
end end
describe '#fee' do
it { is_expected.to monetize(:fee) }
end
describe '#fee?' do describe '#fee?' do
it 'returns true when there is a fee amount' do it 'returns true when there is a fee amount' do
fee_contract = build(:contract_template, fee: 500) fee_contract = build(:contract_template, fee: 500)
no_fee_contract = build(:contract_template, fee: 0) no_fee_contract = build(:contract_template, fee: nil)
expect(fee_contract).to be_fee expect(fee_contract).to be_fee
expect(no_fee_contract).not_to be_fee expect(no_fee_contract).not_to be_fee

View File

@@ -4,7 +4,6 @@ RSpec.describe VideoReleaseConfirmation do
describe "associations" do describe "associations" do
it { is_expected.to belong_to(:releasable) } it { is_expected.to belong_to(:releasable) }
it { is_expected.to belong_to(:video) } it { is_expected.to belong_to(:video) }
it { is_expected.to belong_to(:file_info).optional }
end end
describe "#appears_at" do describe "#appears_at" do