From eacea15a2156200fb363508e1bd92fc48226345b Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 16:35:31 +0200 Subject: [PATCH 01/12] wiki base sceleton --- app/controllers/wikis_controller.rb | 61 +++++++ app/models/project.rb | 1 + app/models/wiki.rb | 20 +++ app/views/layouts/_project_menu.html.haml | 5 + app/views/projects/_form.html.haml | 4 + app/views/wikis/_form.html.haml | 16 ++ app/views/wikis/edit.html.haml | 7 + app/views/wikis/index.html.haml | 21 +++ app/views/wikis/new.html.haml | 5 + app/views/wikis/show.html.haml | 7 + config/routes.rb | 2 + db/migrate/20120216215008_create_wikis.rb | 11 ++ db/migrate/20120219130957_add_slug_to_wiki.rb | 6 + ...20219140810_add_wiki_enabled_to_project.rb | 6 + db/schema.rb | 14 ++ spec/controllers/wikis_controller_spec.rb | 164 ++++++++++++++++++ spec/views/wikis/edit.html.haml_spec.rb | 20 +++ spec/views/wikis/index.html.haml_spec.rb | 24 +++ spec/views/wikis/new.html.haml_spec.rb | 20 +++ spec/views/wikis/show.html.haml_spec.rb | 18 ++ 20 files changed, 432 insertions(+) create mode 100644 app/controllers/wikis_controller.rb create mode 100644 app/models/wiki.rb create mode 100644 app/views/wikis/_form.html.haml create mode 100644 app/views/wikis/edit.html.haml create mode 100644 app/views/wikis/index.html.haml create mode 100644 app/views/wikis/new.html.haml create mode 100644 app/views/wikis/show.html.haml create mode 100644 db/migrate/20120216215008_create_wikis.rb create mode 100644 db/migrate/20120219130957_add_slug_to_wiki.rb create mode 100644 db/migrate/20120219140810_add_wiki_enabled_to_project.rb create mode 100644 spec/controllers/wikis_controller_spec.rb create mode 100644 spec/views/wikis/edit.html.haml_spec.rb create mode 100644 spec/views/wikis/index.html.haml_spec.rb create mode 100644 spec/views/wikis/new.html.haml_spec.rb create mode 100644 spec/views/wikis/show.html.haml_spec.rb diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb new file mode 100644 index 00000000..96c1ac4a --- /dev/null +++ b/app/controllers/wikis_controller.rb @@ -0,0 +1,61 @@ +class WikisController < ApplicationController + before_filter :project + layout "project" + respond_to :html + + def show + @wiki = @project.wikis.find_by_slug(params[:id]) + respond_with(@wiki) + end + + def new + @wiki = Wiki.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @wiki } + end + end + + def edit + @wiki = Wiki.find(params[:id]) + end + + def create + @wiki = Wiki.new(params[:wiki]) + + respond_to do |format| + if @wiki.save + format.html { redirect_to @wiki, notice: 'Wiki was successfully created.' } + format.json { render json: @wiki, status: :created, location: @wiki } + else + format.html { render action: "new" } + format.json { render json: @wiki.errors, status: :unprocessable_entity } + end + end + end + + def update + @wiki = Wiki.find(params[:id]) + + respond_to do |format| + if @wiki.update_attributes(params[:wiki]) + format.html { redirect_to @wiki, notice: 'Wiki was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: "edit" } + format.json { render json: @wiki.errors, status: :unprocessable_entity } + end + end + end + + def destroy + @wiki = Wiki.find(params[:id]) + @wiki.destroy + + respond_to do |format| + format.html { redirect_to wikis_url } + format.json { head :no_content } + end + end +end diff --git a/app/models/project.rb b/app/models/project.rb index 017ef2ce..c3c71009 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -12,6 +12,7 @@ class Project < ActiveRecord::Base has_many :deploy_keys, :dependent => :destroy, :foreign_key => "project_id", :class_name => "Key" has_many :web_hooks, :dependent => :destroy has_many :protected_branches, :dependent => :destroy + has_many :wikis, :dependent => :destroy acts_as_taggable diff --git a/app/models/wiki.rb b/app/models/wiki.rb new file mode 100644 index 00000000..7c504468 --- /dev/null +++ b/app/models/wiki.rb @@ -0,0 +1,20 @@ +class Wiki < ActiveRecord::Base + belongs_to :project + + validates :content, :title, :presence => true + validates :title, :length => 1..250, + :uniqueness => {:scope => :project_id, :case_sensitive => false} + + before_save :set_slug + + + def to_param + slug + end + + protected + + def set_slug + self.slug = self.title.parameterize + end +end diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml index c47a1863..22439aad 100644 --- a/app/views/layouts/_project_menu.html.haml +++ b/app/views/layouts/_project_menu.html.haml @@ -11,6 +11,7 @@ - if @project.issues_enabled = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do Issues + - if @project.merge_requests_enabled = link_to project_merge_requests_path(@project), :class => (controller.controller_name == "merge_requests") ? "current" : nil do Merge Requests @@ -18,3 +19,7 @@ - if @project.wall_enabled = link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do Wall + + - if @project.wiki_enabled + -#= link_to project_wikis_path(@project), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do + Wiki diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index 167a7d00..6137aa5e 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -41,6 +41,10 @@ .clearfix = f.label :wall_enabled, "Wall" .input= f.check_box :wall_enabled + + .clearfix + = f.label :wiki_enabled, "Wiki" + .input= f.check_box :wiki_enabled .clearfix = f.label :description diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml new file mode 100644 index 00000000..1f2e1d91 --- /dev/null +++ b/app/views/wikis/_form.html.haml @@ -0,0 +1,16 @@ += form_for @wiki do |f| + -if @wiki.errors.any? + #error_explanation + %h2= "#{pluralize(@wiki.errors.count, "error")} prohibited this wiki from being saved:" + %ul + - @wiki.errors.full_messages.each do |msg| + %li= msg + + .field + = f.label :title + = f.text_field :title + .field + = f.label :content + = f.text_area :content + .actions + = f.submit 'Save' diff --git a/app/views/wikis/edit.html.haml b/app/views/wikis/edit.html.haml new file mode 100644 index 00000000..801ed640 --- /dev/null +++ b/app/views/wikis/edit.html.haml @@ -0,0 +1,7 @@ +%h1 Editing wiki + += render 'form' + += link_to 'Show', @wiki +\| += link_to 'Back', wikis_path diff --git a/app/views/wikis/index.html.haml b/app/views/wikis/index.html.haml new file mode 100644 index 00000000..d19297f8 --- /dev/null +++ b/app/views/wikis/index.html.haml @@ -0,0 +1,21 @@ +%h1 Listing wikis + +%table + %tr + %th Title + %th Content + %th + %th + %th + + - @wikis.each do |wiki| + %tr + %td= wiki.title + %td= wiki.content + %td= link_to 'Show', wiki + %td= link_to 'Edit', edit_wiki_path(wiki) + %td= link_to 'Destroy', wiki, :confirm => 'Are you sure?', :method => :delete + +%br + += link_to 'New Wiki', new_wiki_path diff --git a/app/views/wikis/new.html.haml b/app/views/wikis/new.html.haml new file mode 100644 index 00000000..c5024d76 --- /dev/null +++ b/app/views/wikis/new.html.haml @@ -0,0 +1,5 @@ +%h1 New wiki + += render 'form' + += link_to 'Back', wikis_path diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml new file mode 100644 index 00000000..1ea67437 --- /dev/null +++ b/app/views/wikis/show.html.haml @@ -0,0 +1,7 @@ +%p#notice= notice + +%h3= @wiki.title += @wiki.content + +%br += link_to 'Edit', edit_project_wiki_path(@project, @wiki) diff --git a/config/routes.rb b/config/routes.rb index 5d880df1..0a0218a0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ Gitlab::Application.routes.draw do + # Optionally, enable Resque here require 'resque/server' mount Resque::Server.new, at: '/info/resque' @@ -55,6 +56,7 @@ Gitlab::Application.routes.draw do get "files" end + resources :wikis, :only => [:show, :edit, :destroy] resource :repository do member do get "branches" diff --git a/db/migrate/20120216215008_create_wikis.rb b/db/migrate/20120216215008_create_wikis.rb new file mode 100644 index 00000000..38947df3 --- /dev/null +++ b/db/migrate/20120216215008_create_wikis.rb @@ -0,0 +1,11 @@ +class CreateWikis < ActiveRecord::Migration + def change + create_table :wikis do |t| + t.string :title + t.text :content + t.integer :project_id + + t.timestamps + end + end +end diff --git a/db/migrate/20120219130957_add_slug_to_wiki.rb b/db/migrate/20120219130957_add_slug_to_wiki.rb new file mode 100644 index 00000000..5f2d5970 --- /dev/null +++ b/db/migrate/20120219130957_add_slug_to_wiki.rb @@ -0,0 +1,6 @@ +class AddSlugToWiki < ActiveRecord::Migration + def change + add_column :wikis, :slug, :string + + end +end diff --git a/db/migrate/20120219140810_add_wiki_enabled_to_project.rb b/db/migrate/20120219140810_add_wiki_enabled_to_project.rb new file mode 100644 index 00000000..ebd71bea --- /dev/null +++ b/db/migrate/20120219140810_add_wiki_enabled_to_project.rb @@ -0,0 +1,6 @@ +class AddWikiEnabledToProject < ActiveRecord::Migration + def change + add_column :projects, :wiki_enabled, :boolean, :default => true, :null => false + + end +end diff --git a/db/schema.rb b/db/schema.rb index 0ec8cfaf..a6cf39c5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,11 @@ # # It's strongly recommended to check this file into your version control system. +<<<<<<< HEAD ActiveRecord::Schema.define(:version => 20120216085842) do +======= +ActiveRecord::Schema.define(:version => 20120219140810) do +>>>>>>> wiki base sceleton create_table "issues", :force => true do |t| t.string "title" @@ -80,6 +84,7 @@ ActiveRecord::Schema.define(:version => 20120216085842) do t.boolean "issues_enabled", :default => true, :null => false t.boolean "wall_enabled", :default => true, :null => false t.boolean "merge_requests_enabled", :default => true, :null => false + t.boolean "wiki_enabled", :default => true, :null => false end create_table "protected_branches", :force => true do |t| @@ -158,4 +163,13 @@ ActiveRecord::Schema.define(:version => 20120216085842) do t.datetime "updated_at" end + create_table "wikis", :force => true do |t| + t.string "title" + t.text "content" + t.integer "project_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + t.string "slug" + end + end diff --git a/spec/controllers/wikis_controller_spec.rb b/spec/controllers/wikis_controller_spec.rb new file mode 100644 index 00000000..bb601aac --- /dev/null +++ b/spec/controllers/wikis_controller_spec.rb @@ -0,0 +1,164 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify 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. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe WikisController do + + # This should return the minimal set of attributes required to create a valid + # Wiki. As you add validations to Wiki, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + # This should return the minimal set of values that should be in the session + # in order to pass any filters (e.g. authentication) defined in + # WikisController. Be sure to keep this updated too. + def valid_session + {} + end + + describe "GET index" do + it "assigns all wikis as @wikis" do + wiki = Wiki.create! valid_attributes + get :index, {}, valid_session + assigns(:wikis).should eq([wiki]) + end + end + + describe "GET show" do + it "assigns the requested wiki as @wiki" do + wiki = Wiki.create! valid_attributes + get :show, {:id => wiki.to_param}, valid_session + assigns(:wiki).should eq(wiki) + end + end + + describe "GET new" do + it "assigns a new wiki as @wiki" do + get :new, {}, valid_session + assigns(:wiki).should be_a_new(Wiki) + end + end + + describe "GET edit" do + it "assigns the requested wiki as @wiki" do + wiki = Wiki.create! valid_attributes + get :edit, {:id => wiki.to_param}, valid_session + assigns(:wiki).should eq(wiki) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Wiki" do + expect { + post :create, {:wiki => valid_attributes}, valid_session + }.to change(Wiki, :count).by(1) + end + + it "assigns a newly created wiki as @wiki" do + post :create, {:wiki => valid_attributes}, valid_session + assigns(:wiki).should be_a(Wiki) + assigns(:wiki).should be_persisted + end + + it "redirects to the created wiki" do + post :create, {:wiki => valid_attributes}, valid_session + response.should redirect_to(Wiki.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved wiki as @wiki" do + # Trigger the behavior that occurs when invalid params are submitted + Wiki.any_instance.stub(:save).and_return(false) + post :create, {:wiki => {}}, valid_session + assigns(:wiki).should be_a_new(Wiki) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Wiki.any_instance.stub(:save).and_return(false) + post :create, {:wiki => {}}, valid_session + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested wiki" do + wiki = Wiki.create! valid_attributes + # Assuming there are no other wikis in the database, this + # specifies that the Wiki created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Wiki.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, {:id => wiki.to_param, :wiki => {'these' => 'params'}}, valid_session + end + + it "assigns the requested wiki as @wiki" do + wiki = Wiki.create! valid_attributes + put :update, {:id => wiki.to_param, :wiki => valid_attributes}, valid_session + assigns(:wiki).should eq(wiki) + end + + it "redirects to the wiki" do + wiki = Wiki.create! valid_attributes + put :update, {:id => wiki.to_param, :wiki => valid_attributes}, valid_session + response.should redirect_to(wiki) + end + end + + describe "with invalid params" do + it "assigns the wiki as @wiki" do + wiki = Wiki.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Wiki.any_instance.stub(:save).and_return(false) + put :update, {:id => wiki.to_param, :wiki => {}}, valid_session + assigns(:wiki).should eq(wiki) + end + + it "re-renders the 'edit' template" do + wiki = Wiki.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Wiki.any_instance.stub(:save).and_return(false) + put :update, {:id => wiki.to_param, :wiki => {}}, valid_session + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested wiki" do + wiki = Wiki.create! valid_attributes + expect { + delete :destroy, {:id => wiki.to_param}, valid_session + }.to change(Wiki, :count).by(-1) + end + + it "redirects to the wikis list" do + wiki = Wiki.create! valid_attributes + delete :destroy, {:id => wiki.to_param}, valid_session + response.should redirect_to(wikis_url) + end + end + +end diff --git a/spec/views/wikis/edit.html.haml_spec.rb b/spec/views/wikis/edit.html.haml_spec.rb new file mode 100644 index 00000000..194dfcaf --- /dev/null +++ b/spec/views/wikis/edit.html.haml_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "wikis/edit" do + before(:each) do + @wiki = assign(:wiki, stub_model(Wiki, + :title => "MyString", + :content => "MyText" + )) + end + + it "renders the edit wiki form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => wikis_path(@wiki), :method => "post" do + assert_select "input#wiki_title", :name => "wiki[title]" + assert_select "textarea#wiki_content", :name => "wiki[content]" + end + end +end diff --git a/spec/views/wikis/index.html.haml_spec.rb b/spec/views/wikis/index.html.haml_spec.rb new file mode 100644 index 00000000..753d4a27 --- /dev/null +++ b/spec/views/wikis/index.html.haml_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +describe "wikis/index" do + before(:each) do + assign(:wikis, [ + stub_model(Wiki, + :title => "Title", + :content => "MyText" + ), + stub_model(Wiki, + :title => "Title", + :content => "MyText" + ) + ]) + end + + it "renders a list of wikis" do + render + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "tr>td", :text => "Title".to_s, :count => 2 + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "tr>td", :text => "MyText".to_s, :count => 2 + end +end diff --git a/spec/views/wikis/new.html.haml_spec.rb b/spec/views/wikis/new.html.haml_spec.rb new file mode 100644 index 00000000..f167d4a0 --- /dev/null +++ b/spec/views/wikis/new.html.haml_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "wikis/new" do + before(:each) do + assign(:wiki, stub_model(Wiki, + :title => "MyString", + :content => "MyText" + ).as_new_record) + end + + it "renders new wiki form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => wikis_path, :method => "post" do + assert_select "input#wiki_title", :name => "wiki[title]" + assert_select "textarea#wiki_content", :name => "wiki[content]" + end + end +end diff --git a/spec/views/wikis/show.html.haml_spec.rb b/spec/views/wikis/show.html.haml_spec.rb new file mode 100644 index 00000000..b8144df0 --- /dev/null +++ b/spec/views/wikis/show.html.haml_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe "wikis/show" do + before(:each) do + @wiki = assign(:wiki, stub_model(Wiki, + :title => "Title", + :content => "MyText" + )) + end + + it "renders attributes in

" do + render + # Run the generator again with the --webrat flag if you want to use webrat matchers + rendered.should match(/Title/) + # Run the generator again with the --webrat flag if you want to use webrat matchers + rendered.should match(/MyText/) + end +end From 4c1b8558df1a874716989b8217ab0acf97d6da04 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 19:05:35 +0200 Subject: [PATCH 02/12] Wiki: base implemetation logic --- app/controllers/wikis_controller.rb | 45 +++++++---------------- app/models/wiki.rb | 18 +++++++-- app/views/layouts/_project_menu.html.haml | 2 +- app/views/wikis/_form.html.haml | 3 +- app/views/wikis/edit.html.haml | 6 +-- app/views/wikis/index.html.haml | 21 ----------- app/views/wikis/new.html.haml | 5 --- config/routes.rb | 3 +- 8 files changed, 35 insertions(+), 68 deletions(-) delete mode 100644 app/views/wikis/index.html.haml delete mode 100644 app/views/wikis/new.html.haml diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb index 96c1ac4a..128e30c1 100644 --- a/app/controllers/wikis_controller.rb +++ b/app/controllers/wikis_controller.rb @@ -1,61 +1,42 @@ class WikisController < ApplicationController before_filter :project layout "project" - respond_to :html def show - @wiki = @project.wikis.find_by_slug(params[:id]) - respond_with(@wiki) - end - - def new - @wiki = Wiki.new - + @wiki = @project.wikis.where(:slug => params[:id]).order("created_at").last respond_to do |format| - format.html # new.html.erb - format.json { render json: @wiki } + if @wiki + format.html + else + @wiki = @project.wikis.new(:slug => params[:id]) + format.html { render "edit" } + end end end def edit - @wiki = Wiki.find(params[:id]) + @wiki = @project.wikis.where(:slug => params[:id]).order("created_at").last + @wiki = Wiki.regenerate_from @wiki end def create - @wiki = Wiki.new(params[:wiki]) + @wiki = @project.wikis.new(params[:wiki]) respond_to do |format| if @wiki.save - format.html { redirect_to @wiki, notice: 'Wiki was successfully created.' } - format.json { render json: @wiki, status: :created, location: @wiki } - else - format.html { render action: "new" } - format.json { render json: @wiki.errors, status: :unprocessable_entity } - end - end - end - - def update - @wiki = Wiki.find(params[:id]) - - respond_to do |format| - if @wiki.update_attributes(params[:wiki]) - format.html { redirect_to @wiki, notice: 'Wiki was successfully updated.' } - format.json { head :no_content } + format.html { redirect_to [@project, @wiki], notice: 'Wiki was successfully updated.' } else format.html { render action: "edit" } - format.json { render json: @wiki.errors, status: :unprocessable_entity } end end end - + def destroy - @wiki = Wiki.find(params[:id]) + @wiki = @project.wikis.find(params[:id]) @wiki.destroy respond_to do |format| format.html { redirect_to wikis_url } - format.json { head :no_content } end end end diff --git a/app/models/wiki.rb b/app/models/wiki.rb index 7c504468..b1ecc06e 100644 --- a/app/models/wiki.rb +++ b/app/models/wiki.rb @@ -2,10 +2,9 @@ class Wiki < ActiveRecord::Base belongs_to :project validates :content, :title, :presence => true - validates :title, :length => 1..250, - :uniqueness => {:scope => :project_id, :case_sensitive => false} + validates :title, :length => 1..250 - before_save :set_slug + before_update :set_slug def to_param @@ -17,4 +16,17 @@ class Wiki < ActiveRecord::Base def set_slug self.slug = self.title.parameterize end + + class << self + def regenerate_from wiki + regenerated_field = [:slug, :content, :title] + + new_wiki = Wiki.new + regenerated_field.each do |field| + new_wiki.send("#{field}=", wiki.send(field)) + end + new_wiki + end + + end end diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml index 22439aad..6a4a3156 100644 --- a/app/views/layouts/_project_menu.html.haml +++ b/app/views/layouts/_project_menu.html.haml @@ -21,5 +21,5 @@ Wall - if @project.wiki_enabled - -#= link_to project_wikis_path(@project), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do + = link_to project_wiki_path(@project, :index), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do Wiki diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml index 1f2e1d91..5c57c2b3 100644 --- a/app/views/wikis/_form.html.haml +++ b/app/views/wikis/_form.html.haml @@ -1,4 +1,4 @@ -= form_for @wiki do |f| += form_for [@project, @wiki] do |f| -if @wiki.errors.any? #error_explanation %h2= "#{pluralize(@wiki.errors.count, "error")} prohibited this wiki from being saved:" @@ -9,6 +9,7 @@ .field = f.label :title = f.text_field :title + = f.hidden_field :slug .field = f.label :content = f.text_area :content diff --git a/app/views/wikis/edit.html.haml b/app/views/wikis/edit.html.haml index 801ed640..f83ff9e1 100644 --- a/app/views/wikis/edit.html.haml +++ b/app/views/wikis/edit.html.haml @@ -1,7 +1,5 @@ -%h1 Editing wiki +%h1 Editing page = render 'form' -= link_to 'Show', @wiki -\| -= link_to 'Back', wikis_path += link_to 'Show', [@project, @wiki] diff --git a/app/views/wikis/index.html.haml b/app/views/wikis/index.html.haml deleted file mode 100644 index d19297f8..00000000 --- a/app/views/wikis/index.html.haml +++ /dev/null @@ -1,21 +0,0 @@ -%h1 Listing wikis - -%table - %tr - %th Title - %th Content - %th - %th - %th - - - @wikis.each do |wiki| - %tr - %td= wiki.title - %td= wiki.content - %td= link_to 'Show', wiki - %td= link_to 'Edit', edit_wiki_path(wiki) - %td= link_to 'Destroy', wiki, :confirm => 'Are you sure?', :method => :delete - -%br - -= link_to 'New Wiki', new_wiki_path diff --git a/app/views/wikis/new.html.haml b/app/views/wikis/new.html.haml deleted file mode 100644 index c5024d76..00000000 --- a/app/views/wikis/new.html.haml +++ /dev/null @@ -1,5 +0,0 @@ -%h1 New wiki - -= render 'form' - -= link_to 'Back', wikis_path diff --git a/config/routes.rb b/config/routes.rb index 0a0218a0..ef2ff709 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -56,7 +56,8 @@ Gitlab::Application.routes.draw do get "files" end - resources :wikis, :only => [:show, :edit, :destroy] + resources :wikis, :only => [:show, :edit, :destroy, :create] + resource :repository do member do get "branches" From 57271da6126a2ccf84cf93e7a1833fcbcfcd36ab Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 19:47:49 +0200 Subject: [PATCH 03/12] Wiki: design fixed --- app/controllers/wikis_controller.rb | 1 + app/models/ability.rb | 7 +++++-- app/views/wikis/_form.html.haml | 11 ++++++----- app/views/wikis/edit.html.haml | 2 -- app/views/wikis/show.html.haml | 8 ++++++-- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb index 128e30c1..5d3f72a1 100644 --- a/app/controllers/wikis_controller.rb +++ b/app/controllers/wikis_controller.rb @@ -1,5 +1,6 @@ class WikisController < ApplicationController before_filter :project + before_filter :add_project_abilities layout "project" def show diff --git a/app/models/ability.rb b/app/models/ability.rb index f31b510d..42963f3a 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -5,6 +5,7 @@ class Ability when "Issue" then issue_abilities(object, subject) when "Note" then note_abilities(object, subject) when "Snippet" then snippet_abilities(object, subject) + when "Wiki" then wiki_abilities(object, subject) else [] end end @@ -26,12 +27,14 @@ class Ability :write_issue, :write_snippet, :write_merge_request, - :write_note + :write_note, + :write_wiki ] if project.allow_write_for?(user) rules << [ :modify_issue, :modify_snippet, + :modify_wiki, :admin_project, :admin_issue, :admin_snippet, @@ -48,7 +51,7 @@ class Ability end class << self - [:issue, :note, :snippet, :merge_request].each do |name| + [:issue, :note, :snippet, :merge_request, :wiki].each do |name| define_method "#{name}_abilities" do |user, subject| if subject.author == user [ diff --git a/app/views/wikis/_form.html.haml b/app/views/wikis/_form.html.haml index 5c57c2b3..f88e67bf 100644 --- a/app/views/wikis/_form.html.haml +++ b/app/views/wikis/_form.html.haml @@ -6,12 +6,13 @@ - @wiki.errors.full_messages.each do |msg| %li= msg - .field + .clearfix = f.label :title - = f.text_field :title + .input= f.text_field :title, :class => :xxlarge = f.hidden_field :slug - .field + .clearfix = f.label :content - = f.text_area :content + .input= f.text_area :content, :class => :xxlarge .actions - = f.submit 'Save' + = f.submit 'Save', :class => "primary btn" + = link_to "Cancel", project_wiki_path(@project, :index), :class => "btn" diff --git a/app/views/wikis/edit.html.haml b/app/views/wikis/edit.html.haml index f83ff9e1..df3274b1 100644 --- a/app/views/wikis/edit.html.haml +++ b/app/views/wikis/edit.html.haml @@ -1,5 +1,3 @@ %h1 Editing page = render 'form' - -= link_to 'Show', [@project, @wiki] diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 1ea67437..0819c170 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -1,7 +1,11 @@ +%h3 + = @wiki.title + - if can? current_user, :write_wiki, @project + = link_to edit_project_wiki_path(@project, @wiki), :class => "right btn small" do + Edit + %p#notice= notice -%h3= @wiki.title = @wiki.content %br -= link_to 'Edit', edit_project_wiki_path(@project, @wiki) From 12ea84fe46b7175e67ac1c683267214bd6c064f8 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 19:54:00 +0200 Subject: [PATCH 04/12] fix shema after rebase --- db/schema.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index a6cf39c5..752da4b5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,11 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -<<<<<<< HEAD -ActiveRecord::Schema.define(:version => 20120216085842) do -======= ActiveRecord::Schema.define(:version => 20120219140810) do ->>>>>>> wiki base sceleton create_table "issues", :force => true do |t| t.string "title" From 40ce6c91311e0dbfdf92bff5b2ef74a2b3361de4 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 19:55:37 +0200 Subject: [PATCH 05/12] Wiki: remove notice line --- app/views/wikis/show.html.haml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 0819c170..59c1778d 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -4,8 +4,6 @@ = link_to edit_project_wiki_path(@project, @wiki), :class => "right btn small" do Edit -%p#notice= notice - = @wiki.content %br From b565cd1972b32071420c51004ba78b6c22cb5742 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 21:16:29 +0200 Subject: [PATCH 06/12] Wiki: fixed main menu --- app/views/layouts/_project_menu.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml index 6a4a3156..6c87bf15 100644 --- a/app/views/layouts/_project_menu.html.haml +++ b/app/views/layouts/_project_menu.html.haml @@ -21,5 +21,5 @@ Wall - if @project.wiki_enabled - = link_to project_wiki_path(@project, :index), :class => current_page?(:controller => "projects", :action => "wiki", :id => @project) ? "current" : nil do + = link_to project_wiki_path(@project, :index), :class => (controller.controller_name == "wikis") ? "current" : nil do Wiki From 85974948e778f5261cc24a2911bd652a91e950da Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 21:52:05 +0200 Subject: [PATCH 07/12] Wiki: history --- app/controllers/wikis_controller.rb | 11 ++++++++++- app/models/wiki.rb | 3 ++- app/views/wikis/history.html.haml | 14 ++++++++++++++ app/views/wikis/show.html.haml | 2 ++ config/routes.rb | 6 +++++- db/migrate/20120219193300_add_user_to_wiki.rb | 6 ++++++ db/schema.rb | 3 ++- 7 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 app/views/wikis/history.html.haml create mode 100644 db/migrate/20120219193300_add_user_to_wiki.rb diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb index 5d3f72a1..9a1638f2 100644 --- a/app/controllers/wikis_controller.rb +++ b/app/controllers/wikis_controller.rb @@ -4,7 +4,11 @@ class WikisController < ApplicationController layout "project" def show - @wiki = @project.wikis.where(:slug => params[:id]).order("created_at").last + if params[:old_page_id] + @wiki = @project.wikis.find(params[:old_page_id]) + else + @wiki = @project.wikis.where(:slug => params[:id]).order("created_at").last + end respond_to do |format| if @wiki format.html @@ -22,6 +26,7 @@ class WikisController < ApplicationController def create @wiki = @project.wikis.new(params[:wiki]) + @wiki.user = current_user respond_to do |format| if @wiki.save @@ -31,6 +36,10 @@ class WikisController < ApplicationController end end end + + def history + @wikis = @project.wikis.where(:slug => params[:id]).order("created_at") + end def destroy @wiki = @project.wikis.find(params[:id]) diff --git a/app/models/wiki.rb b/app/models/wiki.rb index b1ecc06e..62ac4cb8 100644 --- a/app/models/wiki.rb +++ b/app/models/wiki.rb @@ -1,7 +1,8 @@ class Wiki < ActiveRecord::Base belongs_to :project + belongs_to :user - validates :content, :title, :presence => true + validates :content, :title, :user_id, :presence => true validates :title, :length => 1..250 before_update :set_slug diff --git a/app/views/wikis/history.html.haml b/app/views/wikis/history.html.haml new file mode 100644 index 00000000..513f3777 --- /dev/null +++ b/app/views/wikis/history.html.haml @@ -0,0 +1,14 @@ +%h2 Versions +%table + %thead + %tr + %th # + %th last edit + %th created by + %tbody + - @wikis.each_with_index do |wiki_page, i| + %tr + %td= i + 1 + %td= link_to wiki_page.created_at.to_s(:short), project_wiki_path(@project, wiki_page, :old_page_id => wiki_page.id) + %td= wiki_page.user.name + diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 59c1778d..97e1231c 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -1,6 +1,8 @@ %h3 = @wiki.title - if can? current_user, :write_wiki, @project + = link_to history_project_wiki_path(@project, @wiki), :class => "right btn small" do + History = link_to edit_project_wiki_path(@project, @wiki), :class => "right btn small" do Edit diff --git a/config/routes.rb b/config/routes.rb index ef2ff709..eae5b7ea 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -56,7 +56,11 @@ Gitlab::Application.routes.draw do get "files" end - resources :wikis, :only => [:show, :edit, :destroy, :create] + resources :wikis, :only => [:show, :edit, :destroy, :create] do + member do + get "history" + end + end resource :repository do member do diff --git a/db/migrate/20120219193300_add_user_to_wiki.rb b/db/migrate/20120219193300_add_user_to_wiki.rb new file mode 100644 index 00000000..8a6c0a06 --- /dev/null +++ b/db/migrate/20120219193300_add_user_to_wiki.rb @@ -0,0 +1,6 @@ +class AddUserToWiki < ActiveRecord::Migration + def change + add_column :wikis, :user_id, :integer + + end +end diff --git a/db/schema.rb b/db/schema.rb index 752da4b5..c32df7ea 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20120219140810) do +ActiveRecord::Schema.define(:version => 20120219193300) do create_table "issues", :force => true do |t| t.string "title" @@ -166,6 +166,7 @@ ActiveRecord::Schema.define(:version => 20120219140810) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.string "slug" + t.integer "user_id" end end From d68f8401b3f0c3a9b2c887122979e83d95409a69 Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 21:56:18 +0200 Subject: [PATCH 08/12] wiki: improve history --- app/views/wikis/history.html.haml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/views/wikis/history.html.haml b/app/views/wikis/history.html.haml index 513f3777..53bfe7ae 100644 --- a/app/views/wikis/history.html.haml +++ b/app/views/wikis/history.html.haml @@ -9,6 +9,11 @@ - @wikis.each_with_index do |wiki_page, i| %tr %td= i + 1 - %td= link_to wiki_page.created_at.to_s(:short), project_wiki_path(@project, wiki_page, :old_page_id => wiki_page.id) + %td + = link_to wiki_page.created_at.to_s(:short), project_wiki_path(@project, wiki_page, :old_page_id => wiki_page.id) + ( + = time_ago_in_words(wiki_page.created_at) + ago + ) %td= wiki_page.user.name From 2e1f119f2288a864ddc1ab49d2a4c47a573b47df Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Sun, 19 Feb 2012 22:19:31 +0200 Subject: [PATCH 09/12] wiki: markdown support --- app/views/wikis/show.html.haml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 97e1231c..5a4b9045 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -6,6 +6,4 @@ = link_to edit_project_wiki_path(@project, @wiki), :class => "right btn small" do Edit -= @wiki.content - -%br += markdown @wiki.content From bdc42488e9b0d297e0773040e077f414b6605c3d Mon Sep 17 00:00:00 2001 From: vsizov Date: Mon, 20 Feb 2012 20:16:55 +0300 Subject: [PATCH 10/12] wiki is done --- app/assets/stylesheets/main.scss | 2 ++ app/assets/stylesheets/projects.css.scss | 4 ++++ app/assets/stylesheets/wiki.scss | 5 +++++ app/controllers/wikis_controller.rb | 5 ++--- app/helpers/wikis_helper.rb | 5 +++++ app/views/wikis/show.html.haml | 12 +++++++++--- config/routes.rb | 2 +- db/schema.rb | 14 ++++++++++++++ 8 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 app/assets/stylesheets/wiki.scss create mode 100644 app/helpers/wikis_helper.rb diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index df61cc81..841b4307 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -65,4 +65,6 @@ $hover: #FDF5D9; @import "highlight.css.scss"; @import "highlight.black.css.scss"; +@import "wiki.scss"; + diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss index b54e12c8..487925db 100644 --- a/app/assets/stylesheets/projects.css.scss +++ b/app/assets/stylesheets/projects.css.scss @@ -221,3 +221,7 @@ input.git_clone_url { width:270px; background:#fff !important; } + +.span12 hr{ + margin-top: 2px; +} diff --git a/app/assets/stylesheets/wiki.scss b/app/assets/stylesheets/wiki.scss new file mode 100644 index 00000000..acc37b96 --- /dev/null +++ b/app/assets/stylesheets/wiki.scss @@ -0,0 +1,5 @@ +p.time { + color: #999; + font-size: 90%; + margin: 30px 3px 3px 2px; +} diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb index 9a1638f2..544f9887 100644 --- a/app/controllers/wikis_controller.rb +++ b/app/controllers/wikis_controller.rb @@ -42,11 +42,10 @@ class WikisController < ApplicationController end def destroy - @wiki = @project.wikis.find(params[:id]) - @wiki.destroy + @wikis = @project.wikis.where(:slug => params[:id]).delete_all respond_to do |format| - format.html { redirect_to wikis_url } + format.html { redirect_to project_wiki_path(@project, :index), notice: "Page was successfully deleted" } end end end diff --git a/app/helpers/wikis_helper.rb b/app/helpers/wikis_helper.rb new file mode 100644 index 00000000..0c24f57a --- /dev/null +++ b/app/helpers/wikis_helper.rb @@ -0,0 +1,5 @@ +module WikisHelper + def markdown_to_html(text) + RDiscount.new(text).to_html.html_safe + end +end diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 5a4b9045..63a166fe 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -1,9 +1,15 @@ %h3 = @wiki.title + = link_to edit_project_wiki_path(@project, @wiki), :class => "right btn small" do + Edit - if can? current_user, :write_wiki, @project = link_to history_project_wiki_path(@project, @wiki), :class => "right btn small" do History - = link_to edit_project_wiki_path(@project, @wiki), :class => "right btn small" do - Edit +%hr -= markdown @wiki.content += markdown_to_html @wiki.content + +%p.time Last edited by #{@wiki.user.name}, in #{time_ago_in_words @wiki.created_at} +- if can? current_user, :write_wiki, @project + = link_to project_wiki_path(@project, @wiki), :confirm => "Are you sure you want to delete this page?", :method => :delete do + Delete this page diff --git a/config/routes.rb b/config/routes.rb index eae5b7ea..653ec089 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -58,7 +58,7 @@ Gitlab::Application.routes.draw do resources :wikis, :only => [:show, :edit, :destroy, :create] do member do - get "history" + get "history" end end diff --git a/db/schema.rb b/db/schema.rb index c32df7ea..cf4b226c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -159,6 +159,20 @@ ActiveRecord::Schema.define(:version => 20120219193300) do t.datetime "updated_at" end + create_table "wiki_pages", :force => true do |t| + t.string "slug" + t.string "title" + t.text "content" + t.integer "author_id" + t.integer "project_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "wiki_pages", ["author_id"], :name => "index_wiki_pages_on_author_id" + add_index "wiki_pages", ["project_id"], :name => "index_wiki_pages_on_project_id" + add_index "wiki_pages", ["slug"], :name => "index_wiki_pages_on_slug", :unique => true + create_table "wikis", :force => true do |t| t.string "title" t.text "content" From 49d58492f210faa11bbd4125ffd6b241356da827 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 20 Feb 2012 21:16:55 +0300 Subject: [PATCH 11/12] Wiki abilities --- app/controllers/wikis_controller.rb | 17 +++++++++++++++++ app/models/ability.rb | 27 +++++++++++++++------------ app/models/project.rb | 14 +++++++++----- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb index 544f9887..5e8365cf 100644 --- a/app/controllers/wikis_controller.rb +++ b/app/controllers/wikis_controller.rb @@ -1,6 +1,9 @@ class WikisController < ApplicationController before_filter :project before_filter :add_project_abilities + before_filter :authorize_read_wiki! + before_filter :authorize_write_wiki!, :except => [:show, :destroy] + before_filter :authorize_admin_wiki!, :only => :destroy layout "project" def show @@ -48,4 +51,18 @@ class WikisController < ApplicationController format.html { redirect_to project_wiki_path(@project, :index), notice: "Page was successfully deleted" } end end + + protected + + def authorize_read_wiki! + can?(current_user, :read_wiki, @project) + end + + def authorize_write_wiki! + can?(current_user, :write_wiki, @project) + end + + def authorize_admin_wiki! + can?(current_user, :admin_wiki, @project) + end end diff --git a/app/models/ability.rb b/app/models/ability.rb index 42963f3a..c7fddec2 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -15,21 +15,26 @@ class Ability rules << [ :read_project, + :read_wiki, :read_issue, :read_snippet, :read_team_member, :read_merge_request, - :read_note - ] if project.allow_read_for?(user) - - rules << [ + :read_note, :write_project, :write_issue, :write_snippet, :write_merge_request, - :write_note, + :write_note + ] if project.guest_access_for?(user) + + rules << [ + :download_code, + ] if project.report_access_for?(user) + + rules << [ :write_wiki - ] if project.allow_write_for?(user) + ] if project.dev_access_for?(user) rules << [ :modify_issue, @@ -40,18 +45,16 @@ class Ability :admin_snippet, :admin_team_member, :admin_merge_request, - :admin_note - ] if project.allow_admin_for?(user) + :admin_note, + :admin_wiki + ] if project.master_access_for?(user) - rules << [ - :download_code, - ] if project.allow_pull_for?(user) rules.flatten end class << self - [:issue, :note, :snippet, :merge_request, :wiki].each do |name| + [:issue, :note, :snippet, :merge_request].each do |name| define_method "#{name}_abilities" do |user, subject| if subject.author == user [ diff --git a/app/models/project.rb b/app/models/project.rb index c3c71009..f5b9b54c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -233,16 +233,20 @@ class Project < ActiveRecord::Base !users_projects.where(:user_id => user.id).empty? end - def allow_write_for?(user) + def guest_access_for?(user) !users_projects.where(:user_id => user.id).empty? end - def allow_admin_for?(user) - !users_projects.where(:user_id => user.id, :project_access => [UsersProject::MASTER]).empty? || owner_id == user.id + def report_access_for?(user) + !users_projects.where(:user_id => user.id, :project_access => [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty? end - def allow_pull_for?(user) - !users_projects.where(:user_id => user.id, :project_access => [UsersProject::REPORTER, UsersProject::DEVELOPER, UsersProject::MASTER]).empty? + def dev_access_for?(user) + !users_projects.where(:user_id => user.id, :project_access => [UsersProject::DEVELOPER, UsersProject::MASTER]).empty? + end + + def master_access_for?(user) + !users_projects.where(:user_id => user.id, :project_access => [UsersProject::MASTER]).empty? || owner_id == user.id end def root_ref From 621bfdb4aa6c5ef2b031f7c4fb7753eb80d7a5b5 Mon Sep 17 00:00:00 2001 From: vsizov Date: Tue, 21 Feb 2012 20:18:06 +0300 Subject: [PATCH 12/12] wiki: rspec --- db/schema.rb | 14 -- spec/controllers/wikis_controller_spec.rb | 164 ---------------------- spec/factories.rb | 5 + spec/requests/wikis_spec.rb | 35 +++++ spec/views/wikis/edit.html.haml_spec.rb | 20 --- spec/views/wikis/index.html.haml_spec.rb | 24 ---- spec/views/wikis/new.html.haml_spec.rb | 20 --- spec/views/wikis/show.html.haml_spec.rb | 18 --- 8 files changed, 40 insertions(+), 260 deletions(-) delete mode 100644 spec/controllers/wikis_controller_spec.rb create mode 100644 spec/requests/wikis_spec.rb delete mode 100644 spec/views/wikis/edit.html.haml_spec.rb delete mode 100644 spec/views/wikis/index.html.haml_spec.rb delete mode 100644 spec/views/wikis/new.html.haml_spec.rb delete mode 100644 spec/views/wikis/show.html.haml_spec.rb diff --git a/db/schema.rb b/db/schema.rb index cf4b226c..c32df7ea 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -159,20 +159,6 @@ ActiveRecord::Schema.define(:version => 20120219193300) do t.datetime "updated_at" end - create_table "wiki_pages", :force => true do |t| - t.string "slug" - t.string "title" - t.text "content" - t.integer "author_id" - t.integer "project_id" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "wiki_pages", ["author_id"], :name => "index_wiki_pages_on_author_id" - add_index "wiki_pages", ["project_id"], :name => "index_wiki_pages_on_project_id" - add_index "wiki_pages", ["slug"], :name => "index_wiki_pages_on_slug", :unique => true - create_table "wikis", :force => true do |t| t.string "title" t.text "content" diff --git a/spec/controllers/wikis_controller_spec.rb b/spec/controllers/wikis_controller_spec.rb deleted file mode 100644 index bb601aac..00000000 --- a/spec/controllers/wikis_controller_spec.rb +++ /dev/null @@ -1,164 +0,0 @@ -require 'spec_helper' - -# This spec was generated by rspec-rails when you ran the scaffold generator. -# It demonstrates how one might use RSpec to specify 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. -# -# Compared to earlier versions of this generator, there is very limited use of -# stubs and message expectations in this spec. Stubs are only used when there -# is no simpler way to get a handle on the object needed for the example. -# Message expectations are only used when there is no simpler way to specify -# that an instance is receiving a specific message. - -describe WikisController do - - # This should return the minimal set of attributes required to create a valid - # Wiki. As you add validations to Wiki, be sure to - # update the return value of this method accordingly. - def valid_attributes - {} - end - - # This should return the minimal set of values that should be in the session - # in order to pass any filters (e.g. authentication) defined in - # WikisController. Be sure to keep this updated too. - def valid_session - {} - end - - describe "GET index" do - it "assigns all wikis as @wikis" do - wiki = Wiki.create! valid_attributes - get :index, {}, valid_session - assigns(:wikis).should eq([wiki]) - end - end - - describe "GET show" do - it "assigns the requested wiki as @wiki" do - wiki = Wiki.create! valid_attributes - get :show, {:id => wiki.to_param}, valid_session - assigns(:wiki).should eq(wiki) - end - end - - describe "GET new" do - it "assigns a new wiki as @wiki" do - get :new, {}, valid_session - assigns(:wiki).should be_a_new(Wiki) - end - end - - describe "GET edit" do - it "assigns the requested wiki as @wiki" do - wiki = Wiki.create! valid_attributes - get :edit, {:id => wiki.to_param}, valid_session - assigns(:wiki).should eq(wiki) - end - end - - describe "POST create" do - describe "with valid params" do - it "creates a new Wiki" do - expect { - post :create, {:wiki => valid_attributes}, valid_session - }.to change(Wiki, :count).by(1) - end - - it "assigns a newly created wiki as @wiki" do - post :create, {:wiki => valid_attributes}, valid_session - assigns(:wiki).should be_a(Wiki) - assigns(:wiki).should be_persisted - end - - it "redirects to the created wiki" do - post :create, {:wiki => valid_attributes}, valid_session - response.should redirect_to(Wiki.last) - end - end - - describe "with invalid params" do - it "assigns a newly created but unsaved wiki as @wiki" do - # Trigger the behavior that occurs when invalid params are submitted - Wiki.any_instance.stub(:save).and_return(false) - post :create, {:wiki => {}}, valid_session - assigns(:wiki).should be_a_new(Wiki) - end - - it "re-renders the 'new' template" do - # Trigger the behavior that occurs when invalid params are submitted - Wiki.any_instance.stub(:save).and_return(false) - post :create, {:wiki => {}}, valid_session - response.should render_template("new") - end - end - end - - describe "PUT update" do - describe "with valid params" do - it "updates the requested wiki" do - wiki = Wiki.create! valid_attributes - # Assuming there are no other wikis in the database, this - # specifies that the Wiki created on the previous line - # receives the :update_attributes message with whatever params are - # submitted in the request. - Wiki.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) - put :update, {:id => wiki.to_param, :wiki => {'these' => 'params'}}, valid_session - end - - it "assigns the requested wiki as @wiki" do - wiki = Wiki.create! valid_attributes - put :update, {:id => wiki.to_param, :wiki => valid_attributes}, valid_session - assigns(:wiki).should eq(wiki) - end - - it "redirects to the wiki" do - wiki = Wiki.create! valid_attributes - put :update, {:id => wiki.to_param, :wiki => valid_attributes}, valid_session - response.should redirect_to(wiki) - end - end - - describe "with invalid params" do - it "assigns the wiki as @wiki" do - wiki = Wiki.create! valid_attributes - # Trigger the behavior that occurs when invalid params are submitted - Wiki.any_instance.stub(:save).and_return(false) - put :update, {:id => wiki.to_param, :wiki => {}}, valid_session - assigns(:wiki).should eq(wiki) - end - - it "re-renders the 'edit' template" do - wiki = Wiki.create! valid_attributes - # Trigger the behavior that occurs when invalid params are submitted - Wiki.any_instance.stub(:save).and_return(false) - put :update, {:id => wiki.to_param, :wiki => {}}, valid_session - response.should render_template("edit") - end - end - end - - describe "DELETE destroy" do - it "destroys the requested wiki" do - wiki = Wiki.create! valid_attributes - expect { - delete :destroy, {:id => wiki.to_param}, valid_session - }.to change(Wiki, :count).by(-1) - end - - it "redirects to the wikis list" do - wiki = Wiki.create! valid_attributes - delete :destroy, {:id => wiki.to_param}, valid_session - response.should redirect_to(wikis_url) - end - end - -end diff --git a/spec/factories.rb b/spec/factories.rb index 15e54ed2..6d7a4cb7 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -59,3 +59,8 @@ end Factory.add(:web_hook, WebHook) do |obj| obj.url = Faker::Internet.url end + +Factory.add(:wikis, WebHook) do |obj| + obj.title = Faker::Lorem.sentence + obj.content = Faker::Lorem.sentence +end diff --git a/spec/requests/wikis_spec.rb b/spec/requests/wikis_spec.rb new file mode 100644 index 00000000..fd66b5e4 --- /dev/null +++ b/spec/requests/wikis_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe "Wiki" do + let(:project) { Factory :project } + + before do + login_as :user + project.add_access(@user, :read, :write) + end + + describe "Add pages" do + before do + visit project_wiki_path(project, :index) + end + + it "should see form" do + page.should have_content("Editing page") + end + + it "should see added page" do + fill_in "Title", :with => 'Test title' + fill_in "Content", :with => '[link test](test)' + click_on "Save" + + page.should have_content("Test title") + page.should have_content("link test") + + click_link "link test" + + page.should have_content("Editing page") + end + + end + +end diff --git a/spec/views/wikis/edit.html.haml_spec.rb b/spec/views/wikis/edit.html.haml_spec.rb deleted file mode 100644 index 194dfcaf..00000000 --- a/spec/views/wikis/edit.html.haml_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'spec_helper' - -describe "wikis/edit" do - before(:each) do - @wiki = assign(:wiki, stub_model(Wiki, - :title => "MyString", - :content => "MyText" - )) - end - - it "renders the edit wiki form" do - render - - # Run the generator again with the --webrat flag if you want to use webrat matchers - assert_select "form", :action => wikis_path(@wiki), :method => "post" do - assert_select "input#wiki_title", :name => "wiki[title]" - assert_select "textarea#wiki_content", :name => "wiki[content]" - end - end -end diff --git a/spec/views/wikis/index.html.haml_spec.rb b/spec/views/wikis/index.html.haml_spec.rb deleted file mode 100644 index 753d4a27..00000000 --- a/spec/views/wikis/index.html.haml_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'spec_helper' - -describe "wikis/index" do - before(:each) do - assign(:wikis, [ - stub_model(Wiki, - :title => "Title", - :content => "MyText" - ), - stub_model(Wiki, - :title => "Title", - :content => "MyText" - ) - ]) - end - - it "renders a list of wikis" do - render - # Run the generator again with the --webrat flag if you want to use webrat matchers - assert_select "tr>td", :text => "Title".to_s, :count => 2 - # Run the generator again with the --webrat flag if you want to use webrat matchers - assert_select "tr>td", :text => "MyText".to_s, :count => 2 - end -end diff --git a/spec/views/wikis/new.html.haml_spec.rb b/spec/views/wikis/new.html.haml_spec.rb deleted file mode 100644 index f167d4a0..00000000 --- a/spec/views/wikis/new.html.haml_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'spec_helper' - -describe "wikis/new" do - before(:each) do - assign(:wiki, stub_model(Wiki, - :title => "MyString", - :content => "MyText" - ).as_new_record) - end - - it "renders new wiki form" do - render - - # Run the generator again with the --webrat flag if you want to use webrat matchers - assert_select "form", :action => wikis_path, :method => "post" do - assert_select "input#wiki_title", :name => "wiki[title]" - assert_select "textarea#wiki_content", :name => "wiki[content]" - end - end -end diff --git a/spec/views/wikis/show.html.haml_spec.rb b/spec/views/wikis/show.html.haml_spec.rb deleted file mode 100644 index b8144df0..00000000 --- a/spec/views/wikis/show.html.haml_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'spec_helper' - -describe "wikis/show" do - before(:each) do - @wiki = assign(:wiki, stub_model(Wiki, - :title => "Title", - :content => "MyText" - )) - end - - it "renders attributes in

" do - render - # Run the generator again with the --webrat flag if you want to use webrat matchers - rendered.should match(/Title/) - # Run the generator again with the --webrat flag if you want to use webrat matchers - rendered.should match(/MyText/) - end -end