Commit e7d644b7412749e4f433ca54675afec77303a68a
1 parent
1b9b03c1
Exists in
colab
and in
4 other branches
Implement Repository#notify_push action
* Includes this action in the list of actions that do not need
user authentication.
Signed-off-by: Heitor Reis <marcheing@gmail.com>
Showing
2 changed files
with
14 additions
and
5 deletions
Show diff stats
app/controllers/repositories_controller.rb
| 1 | 1 | include OwnershipAuthentication |
| 2 | 2 | |
| 3 | 3 | class RepositoriesController < ApplicationController |
| 4 | - before_action :authenticate_user!, except: [:show, :state, :state_with_date, :index] | |
| 4 | + before_action :authenticate_user!, except: [:show, :state, :state_with_date, :index, :notify_push] | |
| 5 | 5 | before_action :project_owner?, only: [:new, :create], unless: Proc.new { params[:project_id].nil? } |
| 6 | 6 | before_action :repository_owner?, only: [:edit, :update, :destroy, :process_repository] |
| 7 | 7 | before_action :set_repository, only: [:show, :edit, :update, :destroy, :state, :state_with_date, :process_repository] |
| ... | ... | @@ -96,6 +96,13 @@ class RepositoriesController < ApplicationController |
| 96 | 96 | end |
| 97 | 97 | end |
| 98 | 98 | |
| 99 | + def notify_push | |
| 100 | + set_repository | |
| 101 | + @repository.cancel_processing_of_repository if @repository.last_processing_state.end_with? 'ING' | |
| 102 | + @repository.process | |
| 103 | + render :nothing => true, :status => :ok | |
| 104 | + end | |
| 105 | + | |
| 99 | 106 | private |
| 100 | 107 | def set_project_id_repository_types_and_configurations |
| 101 | 108 | @project_id = params[:project_id] | ... | ... |
spec/controllers/repositories_controller_spec.rb
| ... | ... | @@ -479,8 +479,7 @@ describe RepositoriesController, :type => :controller do |
| 479 | 479 | let(:repository) { FactoryGirl.build(:repository) } |
| 480 | 480 | |
| 481 | 481 | before :each do |
| 482 | - Repository.expects(:find).with(repository.id).raises(KalibroClient::Errors::RecordNotFound) | |
| 483 | - post :notify_push, id: repository.id, format: :json | |
| 482 | + Repository.expects(:find).with(repository.id).returns(repository) | |
| 484 | 483 | end |
| 485 | 484 | |
| 486 | 485 | context 'when the repository is being processed' do |
| ... | ... | @@ -488,15 +487,17 @@ describe RepositoriesController, :type => :controller do |
| 488 | 487 | repository.expects(:last_processing_state).returns('INTERPRETING') |
| 489 | 488 | repository.expects(:cancel_processing_of_repository).once |
| 490 | 489 | repository.expects(:process).once |
| 490 | + post :notify_push, id: repository.id | |
| 491 | 491 | end |
| 492 | 492 | |
| 493 | - it { is_expected.to respond_with(:accepted) } | |
| 493 | + it { is_expected.to respond_with(:ok) } | |
| 494 | 494 | end |
| 495 | 495 | |
| 496 | 496 | context "when the repository's processing resulted in an error" do |
| 497 | 497 | before do |
| 498 | 498 | repository.expects(:last_processing_state).returns('ERROR') |
| 499 | 499 | repository.expects(:process).once |
| 500 | + post :notify_push, id: repository.id | |
| 500 | 501 | end |
| 501 | 502 | |
| 502 | 503 | it { is_expected.to respond_with(:ok) } |
| ... | ... | @@ -506,6 +507,7 @@ describe RepositoriesController, :type => :controller do |
| 506 | 507 | before do |
| 507 | 508 | repository.expects(:last_processing_state).returns('READY') |
| 508 | 509 | repository.expects(:process).once |
| 510 | + post :notify_push, id: repository.id | |
| 509 | 511 | end |
| 510 | 512 | |
| 511 | 513 | it { is_expected.to respond_with(:ok) } |
| ... | ... | @@ -517,7 +519,7 @@ describe RepositoriesController, :type => :controller do |
| 517 | 519 | |
| 518 | 520 | before :each do |
| 519 | 521 | Repository.expects(:find).with(repository_id).raises(KalibroClient::Errors::RecordNotFound) |
| 520 | - post :notify_push, id: repository_id, format: :json | |
| 522 | + post :notify_push, id: repository_id | |
| 521 | 523 | end |
| 522 | 524 | |
| 523 | 525 | it { is_expected.to respond_with(:not_found) } | ... | ... |