Add Metapurse
This commit is contained in:
parent
92b65a9101
commit
3719c7acf9
@ -9,7 +9,7 @@ class ApplicationController < ActionController::Base
|
|||||||
before_action :get_footer_tokens
|
before_action :get_footer_tokens
|
||||||
before_action :get_global_doodads
|
before_action :get_global_doodads
|
||||||
|
|
||||||
if (Rails.env.development? || Rails.env.test?)
|
# if (Rails.env.development? || Rails.env.test?)
|
||||||
after_action :verify_authorized, unless: -> { devise_controller? }
|
after_action :verify_authorized, unless: -> { devise_controller? }
|
||||||
# after_action :verify_policy_scoped, only: :index
|
# after_action :verify_policy_scoped, only: :index
|
||||||
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
|
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
|
||||||
@ -19,11 +19,13 @@ class ApplicationController < ActionController::Base
|
|||||||
def user_not_authorized(exception)
|
def user_not_authorized(exception)
|
||||||
policy_name = exception.policy.class.to_s.underscore
|
policy_name = exception.policy.class.to_s.underscore
|
||||||
# flash[:alert] = "#{policy_name}.#{exception.query}"
|
# flash[:alert] = "#{policy_name}.#{exception.query}"
|
||||||
# flash[:error] = t "#{policy_name}.#{exception.query}", scope: "pundit", default: :default
|
flash[:error] = t "#{policy_name}.#{exception.query}", scope: "pundit", default: :default
|
||||||
flash[:alert] = "Unable to #{exception.query[0..-2]} #{policy_name.split("_")[0].capitalize}"
|
if flash[:error] == "You cannot perform this action."
|
||||||
|
flash[:error] = "Unable to #{exception.query[0..-2]} #{policy_name.split("_")[0].capitalize}"
|
||||||
|
end
|
||||||
redirect_to (request.referrer || root_path)
|
redirect_to (request.referrer || root_path)
|
||||||
end
|
end
|
||||||
end
|
# end
|
||||||
|
|
||||||
def authenticate_user!(args = nil)
|
def authenticate_user!(args = nil)
|
||||||
current_user.present?
|
current_user.present?
|
||||||
|
|||||||
73
app/controllers/metapurses_controller.rb
Normal file
73
app/controllers/metapurses_controller.rb
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
class MetapursesController < ApplicationController
|
||||||
|
before_action :set_metapurse, only: %i[ show edit update destroy ]
|
||||||
|
|
||||||
|
# GET /metapurses or /metapurses.json
|
||||||
|
def index
|
||||||
|
authorize @metapurses = Metapurse.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /metapurses/1 or /metapurses/1.json
|
||||||
|
def show
|
||||||
|
authorize @metapurse
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /metapurses/new
|
||||||
|
def new
|
||||||
|
authorize @metapurse = current_user.metapurses.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /metapurses/1/edit
|
||||||
|
def edit
|
||||||
|
authorize @metapurse
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /metapurses or /metapurses.json
|
||||||
|
def create
|
||||||
|
authorize @metapurse = Metapurse.new(metapurse_params)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @metapurse.save
|
||||||
|
format.html { redirect_to metapurse_url(@metapurse), notice: "Metapurse was successfully created." }
|
||||||
|
format.json { render :show, status: :created, location: @metapurse }
|
||||||
|
else
|
||||||
|
format.html { render :new, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @metapurse.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PATCH/PUT /metapurses/1 or /metapurses/1.json
|
||||||
|
def update
|
||||||
|
authorize @metapurse
|
||||||
|
respond_to do |format|
|
||||||
|
if @metapurse.update(metapurse_params)
|
||||||
|
format.html { redirect_to metapurse_url(@metapurse), notice: "Metapurse was successfully updated." }
|
||||||
|
format.json { render :show, status: :ok, location: @metapurse }
|
||||||
|
else
|
||||||
|
format.html { render :edit, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @metapurse.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /metapurses/1 or /metapurses/1.json
|
||||||
|
def destroy
|
||||||
|
@metapurse.destroy!
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to metapurses_url, notice: "Metapurse was successfully destroyed." }
|
||||||
|
format.json { head :no_content }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
def set_metapurse
|
||||||
|
@metapurse = Metapurse.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only allow a list of trusted parameters through.
|
||||||
|
def metapurse_params
|
||||||
|
params.require(:metapurse).permit(:name, :data, :user_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
2
app/helpers/metapurses_helper.rb
Normal file
2
app/helpers/metapurses_helper.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
module MetapursesHelper
|
||||||
|
end
|
||||||
7
app/models/metapurse.rb
Normal file
7
app/models/metapurse.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class Metapurse < ActiveRecord::Base
|
||||||
|
belongs_to :user
|
||||||
|
def icpswap_pool_data_raw
|
||||||
|
icpswap_pool_data_raw = `dfx --identity anonymous canister --network=ic call ggzvv-5qaaa-aaaag-qck7a-cai getAllPools`
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -7,6 +7,7 @@ class User < ActiveRecord::Base
|
|||||||
has_many :doodads
|
has_many :doodads
|
||||||
has_many :projects
|
has_many :projects
|
||||||
has_many :profiles
|
has_many :profiles
|
||||||
|
has_many :metapurses
|
||||||
has_many :active_relationships, class_name: "Relationship",
|
has_many :active_relationships, class_name: "Relationship",
|
||||||
foreign_key: "follower_id",
|
foreign_key: "follower_id",
|
||||||
dependent: :destroy
|
dependent: :destroy
|
||||||
|
|||||||
56
app/policies/metapurse_policy.rb
Normal file
56
app/policies/metapurse_policy.rb
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
class MetapursePolicy
|
||||||
|
attr_reader :user, :metapurse
|
||||||
|
|
||||||
|
def initialize(user, metapurse)
|
||||||
|
@user = user || User.new
|
||||||
|
@metapurse = metapurse
|
||||||
|
end
|
||||||
|
|
||||||
|
class Scope
|
||||||
|
def initialize(user, scope)
|
||||||
|
@user = user
|
||||||
|
@scope = scope
|
||||||
|
end
|
||||||
|
|
||||||
|
def resolve
|
||||||
|
if user.admin?
|
||||||
|
scope.all
|
||||||
|
else
|
||||||
|
scope.all
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
attr_reader :user, :scope
|
||||||
|
end
|
||||||
|
|
||||||
|
def index?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def show?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def create?
|
||||||
|
@user.admin? || @user.signed_in?
|
||||||
|
end
|
||||||
|
|
||||||
|
def new?
|
||||||
|
@user.admin? || @user.signed_in?
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit?
|
||||||
|
@user.admin? || update?
|
||||||
|
end
|
||||||
|
|
||||||
|
def update?
|
||||||
|
@user.admin? || @metapurse.user == @user
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy?
|
||||||
|
@user.admin? || @metapurse.user == @user
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -1,7 +1,7 @@
|
|||||||
.original_flash_message_code
|
.original_flash_message_code
|
||||||
- flash.each do |key, value|
|
- flash.each do |key, value|
|
||||||
%div{class: "alert alert-#{key}"}
|
%div{class: "alert alert-#{key}"}
|
||||||
= value
|
= value.html_safe
|
||||||
|
|
||||||
.react_flash_messages
|
.react_flash_messages
|
||||||
%div#flash_messages
|
%div#flash_messages
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
<li><%= link_to 'Tokens', tokens_path %></li>
|
<li><%= link_to 'Tokens', tokens_path %></li>
|
||||||
<li><%= link_to 'Profiles', profiles_path %></li>
|
<li><%= link_to 'Profiles', profiles_path %></li>
|
||||||
<li><%= link_to 'Projects', projects_path %></li>
|
<li><%= link_to 'Projects', projects_path %></li>
|
||||||
|
<li><%= link_to 'MetaPurse', metapurses_path %></li>
|
||||||
<li><%= link_to 'Canisters', canisters_path %></li>
|
<li><%= link_to 'Canisters', canisters_path %></li>
|
||||||
<li><%= link_to 'Doodads', doodads_path, data: { turbo: false } %></li>
|
<li><%= link_to 'Doodads', doodads_path, data: { turbo: false } %></li>
|
||||||
<% if policy(:bot).index? %>
|
<% if policy(:bot).index? %>
|
||||||
|
|||||||
10
app/views/metapurses/_form.html.haml
Normal file
10
app/views/metapurses/_form.html.haml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
= simple_form_for(@metapurse) do |f|
|
||||||
|
= f.error_notification
|
||||||
|
|
||||||
|
.form-inputs
|
||||||
|
= f.hidden_field :user_id
|
||||||
|
= f.input :name
|
||||||
|
= f.input :data
|
||||||
|
|
||||||
|
.form-actions
|
||||||
|
= f.button :submit
|
||||||
2
app/views/metapurses/_metapurse.json.jbuilder
Normal file
2
app/views/metapurses/_metapurse.json.jbuilder
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
json.extract! metapurse, :id, :name, :data, :created_at, :updated_at
|
||||||
|
json.url metapurse_url(metapurse, format: :json)
|
||||||
7
app/views/metapurses/edit.html.haml
Normal file
7
app/views/metapurses/edit.html.haml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
%h1 Editing metapurse
|
||||||
|
|
||||||
|
= render 'form'
|
||||||
|
|
||||||
|
= link_to 'Show', @metapurse
|
||||||
|
\|
|
||||||
|
= link_to 'Back', metapurses_path
|
||||||
23
app/views/metapurses/index.html.haml
Normal file
23
app/views/metapurses/index.html.haml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
%h1 Listing metapurses
|
||||||
|
|
||||||
|
%table
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th Name
|
||||||
|
%th Data
|
||||||
|
%th
|
||||||
|
%th
|
||||||
|
%th
|
||||||
|
|
||||||
|
%tbody
|
||||||
|
- @metapurses.each do |metapurse|
|
||||||
|
%tr
|
||||||
|
%td= metapurse.name
|
||||||
|
%td= metapurse.data
|
||||||
|
%td= link_to 'Show', metapurse
|
||||||
|
%td= link_to 'Edit', edit_metapurse_path(metapurse)
|
||||||
|
%td= link_to 'Destroy', metapurse, method: :delete, data: { confirm: 'Are you sure?' }
|
||||||
|
|
||||||
|
%br
|
||||||
|
|
||||||
|
= link_to 'New Metapurse', new_metapurse_path
|
||||||
1
app/views/metapurses/index.json.jbuilder
Normal file
1
app/views/metapurses/index.json.jbuilder
Normal file
@ -0,0 +1 @@
|
|||||||
|
json.array! @metapurses, partial: "metapurses/metapurse", as: :metapurse
|
||||||
3
app/views/metapurses/new.html.haml
Normal file
3
app/views/metapurses/new.html.haml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
%h1 New metapurse
|
||||||
|
|
||||||
|
= render 'form'
|
||||||
30
app/views/metapurses/show.html.haml
Normal file
30
app/views/metapurses/show.html.haml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
%p#notice= notice
|
||||||
|
|
||||||
|
%p
|
||||||
|
%b Name:
|
||||||
|
= @metapurse.name
|
||||||
|
-# %p
|
||||||
|
%b Data:
|
||||||
|
= @metapurse.data
|
||||||
|
|
||||||
|
-# - @metapurse.data.each_line do |record|
|
||||||
|
%p
|
||||||
|
= canister_id = record.split[0]
|
||||||
|
= amount = record.split[1].gsub(",","").to_f
|
||||||
|
|
||||||
|
-# - icpswap_pool_data_raw = File.read("./pool_data_raw.txt")
|
||||||
|
- icpswap_pool_data_raw = `dfx --identity anonymous canister --network=ic call ggzvv-5qaaa-aaaag-qck7a-cai getAllPools`
|
||||||
|
- @metapurse.data.each_line do |record|
|
||||||
|
%p
|
||||||
|
- canister_id = record.split[0]
|
||||||
|
= amount = record.split[1].gsub(",","").to_f
|
||||||
|
- icp_canister_id = "ryjl3-tyaaa-aaaaa-aaaba-cai"
|
||||||
|
-# = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0]
|
||||||
|
= icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Symbol = \"(.*)\"; /)[0][0]
|
||||||
|
- value = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Price = [+-]?([1-9]\d*|0)(\.\d+)?/).join.to_f
|
||||||
|
$#{(value * amount).round(2)} USD
|
||||||
|
|
||||||
|
|
||||||
|
= link_to 'Edit', edit_metapurse_path(@metapurse)
|
||||||
|
\|
|
||||||
|
= link_to 'Back', metapurses_path
|
||||||
1
app/views/metapurses/show.json.jbuilder
Normal file
1
app/views/metapurses/show.json.jbuilder
Normal file
@ -0,0 +1 @@
|
|||||||
|
json.partial! "metapurses/metapurse", metapurse: @metapurse
|
||||||
@ -8,3 +8,5 @@ en:
|
|||||||
post_policy:
|
post_policy:
|
||||||
update?: 'You cannot edit this post!'
|
update?: 'You cannot edit this post!'
|
||||||
create?: 'You cannot create posts!'
|
create?: 'You cannot create posts!'
|
||||||
|
metapurse_policy:
|
||||||
|
new?: 'You must <a href="/users/sign_in">sign in</a> to create a new MetaPurse!'
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
|
resources :metapurses
|
||||||
get '/games', to: "visitors#games_index"
|
get '/games', to: "visitors#games_index"
|
||||||
resources :rooms do
|
resources :rooms do
|
||||||
resources :messages
|
resources :messages
|
||||||
|
|||||||
10
db/migrate/20240308044721_create_metapurses.rb
Normal file
10
db/migrate/20240308044721_create_metapurses.rb
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
class CreateMetapurses < ActiveRecord::Migration[7.1]
|
||||||
|
def change
|
||||||
|
create_table :metapurses do |t|
|
||||||
|
t.string :name
|
||||||
|
t.text :data
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
5
db/migrate/20240310122622_add_user_id_to_metapurse.rb
Normal file
5
db/migrate/20240310122622_add_user_id_to_metapurse.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class AddUserIdToMetapurse < ActiveRecord::Migration[7.1]
|
||||||
|
def change
|
||||||
|
add_reference :metapurses, :user, null: false, foreign_key: true
|
||||||
|
end
|
||||||
|
end
|
||||||
12
db/schema.rb
12
db/schema.rb
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.1].define(version: 2024_02_08_170759) do
|
ActiveRecord::Schema[7.1].define(version: 2024_03_10_122622) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
@ -107,6 +107,15 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_08_170759) do
|
|||||||
t.index ["user_id"], name: "index_messages_on_user_id"
|
t.index ["user_id"], name: "index_messages_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "metapurses", force: :cascade do |t|
|
||||||
|
t.string "name"
|
||||||
|
t.text "data"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.bigint "user_id", null: false
|
||||||
|
t.index ["user_id"], name: "index_metapurses_on_user_id"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "microposts", force: :cascade do |t|
|
create_table "microposts", force: :cascade do |t|
|
||||||
t.text "content"
|
t.text "content"
|
||||||
t.string "micropostable_type"
|
t.string "micropostable_type"
|
||||||
@ -299,6 +308,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_08_170759) do
|
|||||||
add_foreign_key "doodads", "users"
|
add_foreign_key "doodads", "users"
|
||||||
add_foreign_key "messages", "rooms"
|
add_foreign_key "messages", "rooms"
|
||||||
add_foreign_key "messages", "users"
|
add_foreign_key "messages", "users"
|
||||||
|
add_foreign_key "metapurses", "users"
|
||||||
add_foreign_key "profiles", "users"
|
add_foreign_key "profiles", "users"
|
||||||
add_foreign_key "projects", "users"
|
add_foreign_key "projects", "users"
|
||||||
add_foreign_key "social_links", "profiles"
|
add_foreign_key "social_links", "profiles"
|
||||||
|
|||||||
3
pool_data_raw.txt
Normal file
3
pool_data_raw.txt
Normal file
File diff suppressed because one or more lines are too long
5
pools.rb
Normal file
5
pools.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
require 'pry'
|
||||||
|
pool_data_raw = `dfx --identity anonymous canister --network=ic call ggzvv-5qaaa-aaaag-qck7a-cai getAllPools`
|
||||||
|
File.write("pool_data_raw.txt", pool_data_raw)
|
||||||
|
binding.pry
|
||||||
|
|
||||||
6
spec/factories/metapurses.rb
Normal file
6
spec/factories/metapurses.rb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
FactoryGirl.define do
|
||||||
|
factory :metapurse do
|
||||||
|
name "MyString"
|
||||||
|
data "MyText"
|
||||||
|
end
|
||||||
|
end
|
||||||
15
spec/helpers/metapurses_helper_spec.rb
Normal file
15
spec/helpers/metapurses_helper_spec.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
# Specs in this file have access to a helper object that includes
|
||||||
|
# the MetapursesHelper. For example:
|
||||||
|
#
|
||||||
|
# describe MetapursesHelper do
|
||||||
|
# describe "string concat" do
|
||||||
|
# it "concats two strings with spaces" do
|
||||||
|
# expect(helper.concat_strings("this","that")).to eq("this that")
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
RSpec.describe MetapursesHelper, type: :helper do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
||||||
5
spec/models/metapurse_spec.rb
Normal file
5
spec/models/metapurse_spec.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Metapurse, type: :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
||||||
135
spec/requests/metapurses_spec.rb
Normal file
135
spec/requests/metapurses_spec.rb
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
||||||
|
# It demonstrates how one might use RSpec to test the controller code that
|
||||||
|
# was generated by Rails when you ran the scaffold generator.
|
||||||
|
#
|
||||||
|
# It assumes that the implementation code is generated by the rails scaffold
|
||||||
|
# generator. If you are using any extension libraries to generate different
|
||||||
|
# controller code, this generated spec may or may not pass.
|
||||||
|
#
|
||||||
|
# It only uses APIs available in rails and/or rspec-rails. There are a number
|
||||||
|
# of tools you can use to make these specs even more expressive, but we're
|
||||||
|
# sticking to rails and rspec-rails APIs to keep things simple and stable.
|
||||||
|
|
||||||
|
RSpec.describe "/metapurses", type: :request do
|
||||||
|
|
||||||
|
# This should return the minimal set of attributes required to create a valid
|
||||||
|
# Metapurse. As you add validations to Metapurse, be sure to
|
||||||
|
# adjust the attributes here as well.
|
||||||
|
let(:valid_attributes) {
|
||||||
|
skip("Add a hash of attributes valid for your model")
|
||||||
|
}
|
||||||
|
|
||||||
|
let(:invalid_attributes) {
|
||||||
|
skip("Add a hash of attributes invalid for your model")
|
||||||
|
}
|
||||||
|
|
||||||
|
describe "GET /index" do
|
||||||
|
it "renders a successful response" do
|
||||||
|
Metapurse.create! valid_attributes
|
||||||
|
get metapurses_url
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "GET /show" do
|
||||||
|
it "renders a successful response" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
get metapurse_url(metapurse)
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "GET /new" do
|
||||||
|
it "renders a successful response" do
|
||||||
|
get new_metapurse_url
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "GET /edit" do
|
||||||
|
it "renders a successful response" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
get edit_metapurse_url(metapurse)
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "POST /create" do
|
||||||
|
context "with valid parameters" do
|
||||||
|
it "creates a new Metapurse" do
|
||||||
|
expect {
|
||||||
|
post metapurses_url, params: { metapurse: valid_attributes }
|
||||||
|
}.to change(Metapurse, :count).by(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects to the created metapurse" do
|
||||||
|
post metapurses_url, params: { metapurse: valid_attributes }
|
||||||
|
expect(response).to redirect_to(metapurse_url(Metapurse.last))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with invalid parameters" do
|
||||||
|
it "does not create a new Metapurse" do
|
||||||
|
expect {
|
||||||
|
post metapurses_url, params: { metapurse: invalid_attributes }
|
||||||
|
}.to change(Metapurse, :count).by(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it "renders a response with 422 status (i.e. to display the 'new' template)" do
|
||||||
|
post metapurses_url, params: { metapurse: invalid_attributes }
|
||||||
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "PATCH /update" do
|
||||||
|
context "with valid parameters" do
|
||||||
|
let(:new_attributes) {
|
||||||
|
skip("Add a hash of attributes valid for your model")
|
||||||
|
}
|
||||||
|
|
||||||
|
it "updates the requested metapurse" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
patch metapurse_url(metapurse), params: { metapurse: new_attributes }
|
||||||
|
metapurse.reload
|
||||||
|
skip("Add assertions for updated state")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects to the metapurse" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
patch metapurse_url(metapurse), params: { metapurse: new_attributes }
|
||||||
|
metapurse.reload
|
||||||
|
expect(response).to redirect_to(metapurse_url(metapurse))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with invalid parameters" do
|
||||||
|
|
||||||
|
it "renders a response with 422 status (i.e. to display the 'edit' template)" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
patch metapurse_url(metapurse), params: { metapurse: invalid_attributes }
|
||||||
|
expect(response).to have_http_status(:unprocessable_entity)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "DELETE /destroy" do
|
||||||
|
it "destroys the requested metapurse" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
expect {
|
||||||
|
delete metapurse_url(metapurse)
|
||||||
|
}.to change(Metapurse, :count).by(-1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "redirects to the metapurses list" do
|
||||||
|
metapurse = Metapurse.create! valid_attributes
|
||||||
|
delete metapurse_url(metapurse)
|
||||||
|
expect(response).to redirect_to(metapurses_url)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
38
spec/routing/metapurses_routing_spec.rb
Normal file
38
spec/routing/metapurses_routing_spec.rb
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
RSpec.describe MetapursesController, type: :routing do
|
||||||
|
describe "routing" do
|
||||||
|
it "routes to #index" do
|
||||||
|
expect(get: "/metapurses").to route_to("metapurses#index")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #new" do
|
||||||
|
expect(get: "/metapurses/new").to route_to("metapurses#new")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #show" do
|
||||||
|
expect(get: "/metapurses/1").to route_to("metapurses#show", id: "1")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #edit" do
|
||||||
|
expect(get: "/metapurses/1/edit").to route_to("metapurses#edit", id: "1")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
it "routes to #create" do
|
||||||
|
expect(post: "/metapurses").to route_to("metapurses#create")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #update via PUT" do
|
||||||
|
expect(put: "/metapurses/1").to route_to("metapurses#update", id: "1")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #update via PATCH" do
|
||||||
|
expect(patch: "/metapurses/1").to route_to("metapurses#update", id: "1")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "routes to #destroy" do
|
||||||
|
expect(delete: "/metapurses/1").to route_to("metapurses#destroy", id: "1")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
25
spec/views/metapurses/edit.html.haml_spec.rb
Normal file
25
spec/views/metapurses/edit.html.haml_spec.rb
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe "metapurses/edit", type: :view do
|
||||||
|
let(:metapurse) {
|
||||||
|
Metapurse.create!(
|
||||||
|
name: "MyString",
|
||||||
|
data: "MyText"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
before(:each) do
|
||||||
|
assign(:metapurse, metapurse)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders the edit metapurse form" do
|
||||||
|
render
|
||||||
|
|
||||||
|
assert_select "form[action=?][method=?]", metapurse_path(metapurse), "post" do
|
||||||
|
|
||||||
|
assert_select "input[name=?]", "metapurse[name]"
|
||||||
|
|
||||||
|
assert_select "textarea[name=?]", "metapurse[data]"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
23
spec/views/metapurses/index.html.haml_spec.rb
Normal file
23
spec/views/metapurses/index.html.haml_spec.rb
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe "metapurses/index", type: :view do
|
||||||
|
before(:each) do
|
||||||
|
assign(:metapurses, [
|
||||||
|
Metapurse.create!(
|
||||||
|
name: "Name",
|
||||||
|
data: "MyText"
|
||||||
|
),
|
||||||
|
Metapurse.create!(
|
||||||
|
name: "Name",
|
||||||
|
data: "MyText"
|
||||||
|
)
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders a list of metapurses" do
|
||||||
|
render
|
||||||
|
cell_selector = Rails::VERSION::STRING >= '7' ? 'div>p' : 'tr>td'
|
||||||
|
assert_select cell_selector, text: Regexp.new("Name".to_s), count: 2
|
||||||
|
assert_select cell_selector, text: Regexp.new("MyText".to_s), count: 2
|
||||||
|
end
|
||||||
|
end
|
||||||
21
spec/views/metapurses/new.html.haml_spec.rb
Normal file
21
spec/views/metapurses/new.html.haml_spec.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe "metapurses/new", type: :view do
|
||||||
|
before(:each) do
|
||||||
|
assign(:metapurse, Metapurse.new(
|
||||||
|
name: "MyString",
|
||||||
|
data: "MyText"
|
||||||
|
))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders new metapurse form" do
|
||||||
|
render
|
||||||
|
|
||||||
|
assert_select "form[action=?][method=?]", metapurses_path, "post" do
|
||||||
|
|
||||||
|
assert_select "input[name=?]", "metapurse[name]"
|
||||||
|
|
||||||
|
assert_select "textarea[name=?]", "metapurse[data]"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
16
spec/views/metapurses/show.html.haml_spec.rb
Normal file
16
spec/views/metapurses/show.html.haml_spec.rb
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe "metapurses/show", type: :view do
|
||||||
|
before(:each) do
|
||||||
|
assign(:metapurse, Metapurse.create!(
|
||||||
|
name: "Name",
|
||||||
|
data: "MyText"
|
||||||
|
))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders attributes in <p>" do
|
||||||
|
render
|
||||||
|
expect(rendered).to match(/Name/)
|
||||||
|
expect(rendered).to match(/MyText/)
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user