crear piratas
This commit is contained in:
parent
dd5da0bd81
commit
36d8a4d4dd
12 changed files with 113 additions and 11 deletions
|
@ -1 +1 @@
|
|||
2.5.5
|
||||
2.5.3
|
||||
|
|
6
Gemfile
6
Gemfile
|
@ -3,7 +3,7 @@
|
|||
source 'https://rubygems.org'
|
||||
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
||||
|
||||
ruby '2.5.5'
|
||||
ruby '2.5.3'
|
||||
|
||||
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
|
||||
gem 'rails', '~> 5.2.3'
|
||||
|
@ -41,3 +41,7 @@ group :development do
|
|||
gem 'spring'
|
||||
gem 'spring-watcher-listen', '~> 2.0.0'
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem 'database_cleaner'
|
||||
end
|
||||
|
|
|
@ -51,6 +51,7 @@ GEM
|
|||
coderay (1.1.2)
|
||||
concurrent-ruby (1.1.5)
|
||||
crass (1.0.4)
|
||||
database_cleaner (1.7.0)
|
||||
erubi (1.8.0)
|
||||
factory_bot (5.0.2)
|
||||
activesupport (>= 4.2.0)
|
||||
|
@ -166,6 +167,7 @@ PLATFORMS
|
|||
DEPENDENCIES
|
||||
bcrypt (~> 3.1.7)
|
||||
bootsnap (>= 1.1.0)
|
||||
database_cleaner
|
||||
factory_bot_rails
|
||||
jbuilder (~> 2.5)
|
||||
listen (>= 3.0.5, < 3.2)
|
||||
|
@ -179,7 +181,7 @@ DEPENDENCIES
|
|||
sqlite3
|
||||
|
||||
RUBY VERSION
|
||||
ruby 2.5.5p157
|
||||
ruby 2.5.3p105
|
||||
|
||||
BUNDLED WITH
|
||||
2.0.1
|
||||
|
|
16
app/controllers/piratas_controller.rb
Normal file
16
app/controllers/piratas_controller.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Las piratas son las que activan el Miniloom
|
||||
class PiratasController < ApplicationController
|
||||
# Registra una cuenta
|
||||
def create
|
||||
@pirata = Pirata.new(params
|
||||
.require(:pirata)
|
||||
.permit(:email, :nick, :password))
|
||||
|
||||
return if @pirata.save
|
||||
|
||||
render json: { errors: @pirata.errors.full_messages },
|
||||
status: :unprocessable_entity
|
||||
end
|
||||
end
|
10
app/models/pirata.rb
Normal file
10
app/models/pirata.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Las piratas son las usuarias empoderadas del miniloom
|
||||
class Pirata < ApplicationRecord
|
||||
# Tiene una contraseña segura :P
|
||||
has_secure_password
|
||||
# Una por correo
|
||||
validates :email, presence: true, uniqueness: true
|
||||
validates :nick, presence: true, uniqueness: true
|
||||
end
|
3
app/views/piratas/create.json.jbuilder
Normal file
3
app/views/piratas/create.json.jbuilder
Normal file
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
json.call(@pirata, :nick, :email)
|
|
@ -1,5 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Rails.application.routes.draw do
|
||||
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
|
||||
# No queremos un índice de piratas
|
||||
resources :piratas, only: %i[create]
|
||||
end
|
||||
|
|
13
db/migrate/20190405203443_create_pirata.rb
Normal file
13
db/migrate/20190405203443_create_pirata.rb
Normal file
|
@ -0,0 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Crear la tabla de piratas con la menor cantidad de metadata y d0x
|
||||
# posible
|
||||
class CreatePirata < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :pirata do |t|
|
||||
t.string :nick, unique: true
|
||||
t.string :email, unique: true
|
||||
t.string :password_digest
|
||||
end
|
||||
end
|
||||
end
|
33
test/controllers/piratas_controller_test.rb
Normal file
33
test/controllers/piratas_controller_test.rb
Normal file
|
@ -0,0 +1,33 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'test_helper'
|
||||
|
||||
class PiratasControllerTest < ActionDispatch::IntegrationTest
|
||||
test 'se pueden registrar' do
|
||||
post piratas_url, as: :json, params: {
|
||||
pirata: {
|
||||
nick: 'rene',
|
||||
email: 'rene@partidopirata.com.ar',
|
||||
password: '12345678'
|
||||
}
|
||||
}
|
||||
body = JSON.parse @response.body
|
||||
pirata = Pirata.find_by_nick(body['nick'])
|
||||
|
||||
assert_equal 'rene@partidopirata.com.ar', pirata.email
|
||||
assert_equal pirata, pirata.authenticate('12345678')
|
||||
end
|
||||
|
||||
test 'no se pueden registrar dos veces' do
|
||||
pirata = create :pirata
|
||||
post piratas_url, as: :json, params: {
|
||||
pirata: {
|
||||
nick: pirata.nick,
|
||||
email: pirata.email,
|
||||
password: '12345678'
|
||||
}
|
||||
}
|
||||
body = JSON.parse @response.body
|
||||
assert_equal %w[errors], body.keys
|
||||
end
|
||||
end
|
9
test/factories/pirata.rb
Normal file
9
test/factories/pirata.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
FactoryBot.define do
|
||||
factory :pirata do
|
||||
email { SecureRandom.hex + '@partidopirata.com.ar' }
|
||||
nick { SecureRandom.hex }
|
||||
password { '12345678' }
|
||||
end
|
||||
end
|
11
test/models/pirata_test.rb
Normal file
11
test/models/pirata_test.rb
Normal file
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'test_helper'
|
||||
|
||||
class PirataTest < ActiveSupport::TestCase
|
||||
test 'se pueden crear' do
|
||||
pirata = create :pirata
|
||||
|
||||
assert_equal true, pirata.valid?
|
||||
end
|
||||
end
|
|
@ -3,13 +3,13 @@
|
|||
ENV['RAILS_ENV'] ||= 'test'
|
||||
require_relative '../config/environment'
|
||||
require 'rails/test_help'
|
||||
require 'database_cleaner'
|
||||
|
||||
module ActiveSupport
|
||||
class TestCase
|
||||
# Setup all fixtures in test/fixtures/*.yml for all tests in
|
||||
# alphabetical order.
|
||||
fixtures :all
|
||||
class ActiveSupport::TestCase
|
||||
include FactoryBot::Syntax::Methods
|
||||
|
||||
# Add more helper methods to be used by all tests here...
|
||||
end
|
||||
DatabaseCleaner.strategy = :transaction
|
||||
|
||||
setup { DatabaseCleaner.start }
|
||||
teardown { DatabaseCleaner.clean }
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue