Commit 4528fa9817f2f9ba9ccf330ea2c9f6575b6a3c4b

Authored by Dmitriy Zaporozhets
1 parent 1882baa1

modify api to work with new deploy keys

lib/api/internal.rb
... ... @@ -25,8 +25,8 @@ module Gitlab
25 25 return false unless project
26 26  
27 27  
28   - if key.is_deploy_key
29   - project == key.project && git_cmd == 'git-upload-pack'
  28 + if key.is_a? DeployKey
  29 + key.projects.include?(project) && git_cmd == 'git-upload-pack'
30 30 else
31 31 user = key.user
32 32  
... ...
lib/api/projects.rb
... ... @@ -531,8 +531,8 @@ module Gitlab
531 531 # POST /projects/:id/keys
532 532 post ":id/keys" do
533 533 attrs = attributes_for_keys [:title, :key]
534   - key = user_project.deploy_keys.new attrs
535   - if key.save
  534 + key = DeployKey.new attrs
  535 + if key.valid? && user_project.deploy_keys << key
536 536 present key, with: Entities::SSHKey
537 537 else
538 538 not_found!
... ... @@ -545,9 +545,8 @@ module Gitlab
545 545 # DELETE /projects/:id/keys/:id
546 546 delete ":id/keys/:key_id" do
547 547 key = user_project.deploy_keys.find params[:key_id]
548   - key.delete
  548 + key.destroy
549 549 end
550   -
551 550 end
552 551 end
553 552 end
... ...
lib/api/users.rb
... ... @@ -174,7 +174,7 @@ module Gitlab
174 174 delete "keys/:id" do
175 175 begin
176 176 key = current_user.keys.find params[:id]
177   - key.delete
  177 + key.destroy
178 178 rescue
179 179 end
180 180 end
... ...
spec/models/project_spec.rb
... ... @@ -37,7 +37,8 @@ describe Project do
37 37 it { should have_many(:users_projects).dependent(:destroy) }
38 38 it { should have_many(:notes).dependent(:destroy) }
39 39 it { should have_many(:snippets).dependent(:destroy) }
40   - it { should have_many(:deploy_keys).dependent(:destroy) }
  40 + it { should have_many(:deploy_keys_projects).dependent(:destroy) }
  41 + it { should have_many(:deploy_keys) }
41 42 it { should have_many(:hooks).dependent(:destroy) }
42 43 it { should have_many(:protected_branches).dependent(:destroy) }
43 44 it { should have_one(:forked_project_link).dependent(:destroy) }
... ...
spec/requests/api/projects_spec.rb
... ... @@ -13,7 +13,6 @@ describe Gitlab::API do
13 13 let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') }
14 14 let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) }
15 15 let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) }
16   - let(:key) { create(:key, project: project) }
17 16  
18 17 before { project.team << [user, :reporter] }
19 18  
... ... @@ -636,58 +635,61 @@ describe Gitlab::API do
636 635 end
637 636 end
638 637  
639   - describe "GET /projects/:id/keys" do
640   - it "should return array of ssh keys" do
641   - project.deploy_keys << key
642   - project.save
643   - get api("/projects/#{project.id}/keys", user)
644   - response.status.should == 200
645   - json_response.should be_an Array
646   - json_response.first['title'].should == key.title
647   - end
648   - end
  638 + describe :deploy_keys do
  639 + let(:deploy_keys_project) { create(:deploy_keys_project, project: project) }
  640 + let(:deploy_key) { deploy_keys_project.deploy_key }
649 641  
650   - describe "GET /projects/:id/keys/:key_id" do
651   - it "should return a single key" do
652   - project.deploy_keys << key
653   - project.save
654   - get api("/projects/#{project.id}/keys/#{key.id}", user)
655   - response.status.should == 200
656   - json_response['title'].should == key.title
657   - end
  642 + describe "GET /projects/:id/keys" do
  643 + before { deploy_key }
658 644  
659   - it "should return 404 Not Found with invalid ID" do
660   - get api("/projects/#{project.id}/keys/404", user)
661   - response.status.should == 404
  645 + it "should return array of ssh keys" do
  646 + get api("/projects/#{project.id}/keys", user)
  647 + response.status.should == 200
  648 + json_response.should be_an Array
  649 + json_response.first['title'].should == deploy_key.title
  650 + end
662 651 end
663   - end
664 652  
665   - describe "POST /projects/:id/keys" do
666   - it "should not create an invalid ssh key" do
667   - post api("/projects/#{project.id}/keys", user), { title: "invalid key" }
668   - response.status.should == 404
669   - end
  653 + describe "GET /projects/:id/keys/:key_id" do
  654 + it "should return a single key" do
  655 + get api("/projects/#{project.id}/keys/#{deploy_key.id}", user)
  656 + response.status.should == 200
  657 + json_response['title'].should == deploy_key.title
  658 + end
670 659  
671   - it "should create new ssh key" do
672   - key_attrs = attributes_for :key
673   - expect {
674   - post api("/projects/#{project.id}/keys", user), key_attrs
675   - }.to change{ project.deploy_keys.count }.by(1)
  660 + it "should return 404 Not Found with invalid ID" do
  661 + get api("/projects/#{project.id}/keys/404", user)
  662 + response.status.should == 404
  663 + end
676 664 end
677   - end
678 665  
679   - describe "DELETE /projects/:id/keys/:key_id" do
680   - it "should delete existing key" do
681   - project.deploy_keys << key
682   - project.save
683   - expect {
684   - delete api("/projects/#{project.id}/keys/#{key.id}", user)
685   - }.to change{ project.deploy_keys.count }.by(-1)
  666 + describe "POST /projects/:id/keys" do
  667 + it "should not create an invalid ssh key" do
  668 + post api("/projects/#{project.id}/keys", user), { title: "invalid key" }
  669 + response.status.should == 404
  670 + end
  671 +
  672 + it "should create new ssh key" do
  673 + key_attrs = attributes_for :key
  674 + expect {
  675 + post api("/projects/#{project.id}/keys", user), key_attrs
  676 + }.to change{ project.deploy_keys.count }.by(1)
  677 + end
686 678 end
687 679  
688   - it "should return 404 Not Found with invalid ID" do
689   - delete api("/projects/#{project.id}/keys/404", user)
690   - response.status.should == 404
  680 + describe "DELETE /projects/:id/keys/:key_id" do
  681 + before { deploy_key }
  682 +
  683 + it "should delete existing key" do
  684 + expect {
  685 + delete api("/projects/#{project.id}/keys/#{deploy_key.id}", user)
  686 + }.to change{ project.deploy_keys.count }.by(-1)
  687 + end
  688 +
  689 + it "should return 404 Not Found with invalid ID" do
  690 + delete api("/projects/#{project.id}/keys/404", user)
  691 + response.status.should == 404
  692 + end
691 693 end
692 694 end
693 695 end
... ...