Add Language model and LanguageController
This commit is contained in:
		@@ -2,6 +2,7 @@ FactoryBot.define do
 | 
			
		||||
  factory :definition do
 | 
			
		||||
    pos { "n" }
 | 
			
		||||
    definition { "this is a definition" }
 | 
			
		||||
    language_id { FactoryBot.create(:language).id }
 | 
			
		||||
    word_id { FactoryBot.create(:word).id }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								spec/factories/languages.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								spec/factories/languages.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
FactoryBot.define do
 | 
			
		||||
  factory :language do
 | 
			
		||||
    name { "MyString" }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
FactoryBot.define do
 | 
			
		||||
  factory :part_of_speech do
 | 
			
		||||
    sequence(:pos) { |n| "test-#{n.to_s}" }
 | 
			
		||||
    language_id { FactoryBot.create(:language).id }
 | 
			
		||||
    definition { "test definition" }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								spec/models/language_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								spec/models/language_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Language, type: :model do
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										106
									
								
								spec/requests/language_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								spec/requests/language_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe "Languages", type: :request do
 | 
			
		||||
 | 
			
		||||
  describe "GET :index" do
 | 
			
		||||
    it "returns http success" do
 | 
			
		||||
      get "/languages/"
 | 
			
		||||
      expect(response).to have_http_status(:success)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "lists all languages" do
 | 
			
		||||
      language = FactoryBot.create(:language)
 | 
			
		||||
      get "/languages/"
 | 
			
		||||
      expect(response.body).to include(language.name)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "has a new-language link" do
 | 
			
		||||
      get "/languages/"
 | 
			
		||||
      expect(response.body).to have_selector(%(a[href="#{new_language_path}"]))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "has an edit button" do
 | 
			
		||||
      language = FactoryBot.create(:language)
 | 
			
		||||
      get "/languages/"
 | 
			
		||||
      expect(response.body).to have_link("Edit")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "has a delete button" do
 | 
			
		||||
      language = FactoryBot.create(:language)
 | 
			
		||||
      get "/languages/"
 | 
			
		||||
      expect(response.body).to have_link("Delete")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "GET :new" do
 | 
			
		||||
    it "returns http success" do
 | 
			
		||||
      get "/languages/new"
 | 
			
		||||
      expect(response).to have_http_status(:success)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "has a form for a new language" do
 | 
			
		||||
      get "/languages/new"
 | 
			
		||||
      expect(response.body).to have_selector(%(input[name="language[name]"]))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "POST :create" do
 | 
			
		||||
    it "redirect to languages_path on success" do
 | 
			
		||||
      post "/languages", params: { language: { name: "Test Name" } }
 | 
			
		||||
      expect(response).to redirect_to(languages_path)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "creates a new language" do
 | 
			
		||||
      post "/languages", params: { language: { name: "Test Name" } }
 | 
			
		||||
      expect(Language.count).to eq(1)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "requires a name for a new language" do
 | 
			
		||||
      post "/languages", params: { language: { name: nil } }
 | 
			
		||||
      expect(response).to have_http_status(:unprocessable_entity)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "GET :edit" do
 | 
			
		||||
    before :each do
 | 
			
		||||
      @language = FactoryBot.create(:language)
 | 
			
		||||
      get "/languages/#{@language.id}/edit"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "returns http success" do
 | 
			
		||||
      expect(response).to have_http_status(:success)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "has a form to edit language" do
 | 
			
		||||
      expect(response.body).to have_selector(%(input[name="language[name]"]))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "PATCH :update" do
 | 
			
		||||
    before :each do
 | 
			
		||||
      @language = FactoryBot.create(:language)
 | 
			
		||||
      @params = { language: { name: "Test Name Update" } }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "updates a language" do
 | 
			
		||||
      patch "/languages/#{@language.id}", params: @params
 | 
			
		||||
      expect(response).to redirect_to(languages_path)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "requires params to update a language" do
 | 
			
		||||
      @params = { language: { name: nil, invalid: "oh no" } }
 | 
			
		||||
      patch "/languages/#{@language.id}", params: @params
 | 
			
		||||
      expect(response).to have_http_status(:unprocessable_entity)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "DELETE :destroy" do
 | 
			
		||||
    it "deletes a language" do
 | 
			
		||||
      language = FactoryBot.create(:language)
 | 
			
		||||
      language2 = FactoryBot.create(:language)
 | 
			
		||||
      delete "/languages/#{language.id}"
 | 
			
		||||
      expect(Language.all).to eq([language2])
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@@ -27,6 +27,12 @@ RSpec.describe "Root path", type: :request do
 | 
			
		||||
      expect(response.body).to include("Sign Out")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "should have the 'Languages' link" do
 | 
			
		||||
      sign_in FactoryBot.create(:user)
 | 
			
		||||
      get root_path
 | 
			
		||||
      expect(response.body).to have_selector(%(a[href="#{languages_path}"]))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "should welcome user by username" do
 | 
			
		||||
      user = FactoryBot.create(:user)
 | 
			
		||||
      sign_in user
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe "Words", type: :request do
 | 
			
		||||
  describe "GET /index" do
 | 
			
		||||
 | 
			
		||||
    it "renders the index template" do
 | 
			
		||||
      get "/words"
 | 
			
		||||
      expect(response).to render_template(:index)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										0
									
								
								spec/views/.keep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								spec/views/.keep
									
									
									
									
									
										Normal file
									
								
							
		Reference in New Issue
	
	Block a user