mirror of
https://github.com/Fishwaldo/huginn.git
synced 2025-03-15 19:31:26 +00:00
new credentials uploading feature
rm req json, not saving file, styled button a bit skinny controller fat model minor spacing mistake build user credentials fixed mass assignment issue undo mass assignment variables spec in progress spec fixed exception issue json fixtures slight change to test added test to assert credentials created for current user only added tests to satisfy requirements refined import method added status 422 saving two lines of code one more test fixed small bug, words changed minor change in test styled file upload button deleted unnecessary spec switched to modal format made modal more presentable minor change to modal fix indentation issue ok nested correctly within form tag
This commit is contained in:
parent
2a9ff37c08
commit
26e776db4d
6 changed files with 126 additions and 1 deletions
|
@ -14,6 +14,26 @@ class UserCredentialsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def import
|
||||
if params[:file]
|
||||
file = params[:file]
|
||||
content = JSON.parse(file.read)
|
||||
new_credentials = content.map do |hash|
|
||||
current_user.user_credentials.build(hash.slice("credential_name", "credential_value", "mode"))
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
if new_credentials.map(&:save).all?
|
||||
format.html { redirect_to user_credentials_path, notice: "The file was successfully uploaded."}
|
||||
else
|
||||
format.html { redirect_to user_credentials_path, notice: 'One or more of the uploaded credentials was not imported due to an error. Perhaps an existing credential had the same name?'}
|
||||
end
|
||||
end
|
||||
else
|
||||
redirect_to user_credentials_path, notice: "No file was chosen to be uploaded."
|
||||
end
|
||||
end
|
||||
|
||||
def new
|
||||
@user_credential = current_user.user_credentials.build
|
||||
|
||||
|
|
|
@ -39,6 +39,28 @@
|
|||
<div class="btn-group">
|
||||
<%= link_to new_user_credential_path, class: "btn btn-default" do %><span class="glyphicon glyphicon-plus"></span> New Credential<% end %>
|
||||
<%= link_to user_credentials_path(format: :json), class: "btn btn-default" do %><span class="glyphicon glyphicon-cloud-download"></span> Download Credentials<% end %>
|
||||
<%= link_to '#', data: { toggle: 'modal', target: '#credentials-upload' }, class: "btn btn-default credentials-upload-button" do %><span class="glyphicon glyphicon-upload"></span> Upload Credentials<% end %>
|
||||
</div>
|
||||
|
||||
<div id="credentials-upload" class="modal fade" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<%= form_tag import_user_credentials_path, multipart: true do %>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
|
||||
<h4 class="modal-title">Upload Credentials</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>Upload a credentials file that you have previously exported from a Huginn instance.</p>
|
||||
<%= file_field_tag :file, class: 'form-control' %>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<%= button_tag 'Cancel', class: 'btn btn-default', 'data-dismiss' => 'modal' %>
|
||||
<%= submit_tag 'Upload', class: 'btn btn-primary' %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -48,7 +48,11 @@ Huginn::Application.routes.draw do
|
|||
resource :diagram, :only => [:show]
|
||||
end
|
||||
|
||||
resources :user_credentials, :except => :show
|
||||
resources :user_credentials, :except => :show do
|
||||
collection do
|
||||
post :import
|
||||
end
|
||||
end
|
||||
|
||||
resources :services, :only => [:index, :destroy] do
|
||||
member do
|
||||
|
|
|
@ -10,6 +10,7 @@ describe UserCredentialsController do
|
|||
|
||||
before do
|
||||
sign_in users(:bob)
|
||||
@file = fixture_file_upload('user_credentials.json')
|
||||
end
|
||||
|
||||
describe "GET index" do
|
||||
|
@ -30,6 +31,26 @@ describe UserCredentialsController do
|
|||
end
|
||||
end
|
||||
|
||||
describe "Post import" do
|
||||
it "asserts user credentials were created for current user only" do
|
||||
post :import, :file => @file
|
||||
expect(controller.current_user.id).to eq(users(:bob).id)
|
||||
expect(controller.current_user.user_credentials).to eq(users(:bob).user_credentials)
|
||||
end
|
||||
|
||||
it "asserts that primary id in json file is ignored" do
|
||||
post :import, :file => @file
|
||||
expect(controller.current_user.user_credentials.last.id).not_to eq(24)
|
||||
end
|
||||
|
||||
it "duplicate credential name shows an error that it is not saved" do
|
||||
file1 = fixture_file_upload('multiple_user_credentials.json')
|
||||
post :import, :file => file1
|
||||
expect(flash[:notice]).to eq("One or more of the uploaded credentials was not imported due to an error. Perhaps an existing credential had the same name?")
|
||||
expect(response).to redirect_to(user_credentials_path)
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST create" do
|
||||
it "creates UserCredentials for the current user" do
|
||||
expect {
|
||||
|
|
38
spec/fixtures/multiple_user_credentials.json
vendored
Normal file
38
spec/fixtures/multiple_user_credentials.json
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
[
|
||||
{
|
||||
"id": 23,
|
||||
"user_id": 30,
|
||||
"credential_name": "Google_api_key",
|
||||
"credential_value": "gcperfxrtqymqmluvskxzyiyxxfnjduzncoukyqehkrkamofwz",
|
||||
"created_at": "2016-04-01 10:50:59 -0700",
|
||||
"updated_at": "2016-04-01 10:50:59 -0700",
|
||||
"mode": "text"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"user_id": 30,
|
||||
"credential_name": "twitter_secret_key",
|
||||
"credential_value": "jhpswiebwhbrnabgkbvczrwcyxblxtyvvlvkhuoudjalcqmlwz",
|
||||
"created_at": "2016-04-01 10:50:59 -0700",
|
||||
"updated_at": "2016-04-01 10:50:59 -0700",
|
||||
"mode": "text"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"user_id": 30,
|
||||
"credential_name": "Google_api_key",
|
||||
"credential_value": "gcperfxrtqymqmluvskxzyiyxxfnjduzncoukyqehkrkamofwz",
|
||||
"created_at": "2016-04-01 10:50:59 -0700",
|
||||
"updated_at": "2016-04-01 10:50:59 -0700",
|
||||
"mode": "text"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"user_id": 30,
|
||||
"credential_name": "twitter_secret_key",
|
||||
"credential_value": "jhpswiebwhbrnabgkbvczrwcyxblxtyvvlvkhuoudjalcqmlwz",
|
||||
"created_at": "2016-04-01 10:50:59 -0700",
|
||||
"updated_at": "2016-04-01 10:50:59 -0700",
|
||||
"mode": "text"
|
||||
}
|
||||
]
|
20
spec/fixtures/user_credentials.json
vendored
Normal file
20
spec/fixtures/user_credentials.json
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
[
|
||||
{
|
||||
"id": 23,
|
||||
"user_id": 30,
|
||||
"credential_name": "Google_api_key",
|
||||
"credential_value": "gcperfxrtqymqmluvskxzyiyxxfnjduzncoukyqehkrkamofwz",
|
||||
"created_at": "2016-04-01 10:50:59 -0700",
|
||||
"updated_at": "2016-04-01 10:50:59 -0700",
|
||||
"mode": "text"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"user_id": 30,
|
||||
"credential_name": "twitter_secret_key",
|
||||
"credential_value": "jhpswiebwhbrnabgkbvczrwcyxblxtyvvlvkhuoudjalcqmlwz",
|
||||
"created_at": "2016-04-01 10:50:59 -0700",
|
||||
"updated_at": "2016-04-01 10:50:59 -0700",
|
||||
"mode": "text"
|
||||
}
|
||||
]
|
Loading…
Add table
Reference in a new issue