From fe8a439225522157e348cd361c7651c19fae7140 Mon Sep 17 00:00:00 2001 From: Nicolas Cavigneaux Date: Thu, 8 Feb 2018 20:23:22 +0100 Subject: [PATCH] Add admin page to list all available projects in DB See #39 --- apps/admin/controllers/projects/index.rb | 3 ++ apps/admin/templates/application.html.slim | 4 ++- apps/admin/templates/projects/index.html.slim | 12 +++++++- apps/admin/views/projects/index.rb | 4 +++ .../repositories/project_repository.rb | 3 ++ spec/admin/controllers/projects/index_spec.rb | 30 +++++++++++++++++++ spec/admin/views/projects/index_spec.rb | 8 +++++ 7 files changed, 62 insertions(+), 2 deletions(-) diff --git a/apps/admin/controllers/projects/index.rb b/apps/admin/controllers/projects/index.rb index 05bf42d..68f6dfa 100644 --- a/apps/admin/controllers/projects/index.rb +++ b/apps/admin/controllers/projects/index.rb @@ -2,7 +2,10 @@ module Admin::Controllers::Projects class Index include Admin::Action + expose :projects + def call(params) + @projects = ProjectRepository.new.sorted end end end diff --git a/apps/admin/templates/application.html.slim b/apps/admin/templates/application.html.slim index 6cccf85..a44324a 100644 --- a/apps/admin/templates/application.html.slim +++ b/apps/admin/templates/application.html.slim @@ -4,5 +4,7 @@ html title | Admin = favicon + = stylesheet 'bootstrap', 'main' body - = yield + .container + = yield diff --git a/apps/admin/templates/projects/index.html.slim b/apps/admin/templates/projects/index.html.slim index 4a709b7..f665158 100644 --- a/apps/admin/templates/projects/index.html.slim +++ b/apps/admin/templates/projects/index.html.slim @@ -1 +1,11 @@ -p Here will be all projects! +h2 All projects + +table.table.table-hover + tr + th Project name + th Since + - projects.each do |project| + tr + td = link_to_github(project) + td = project.created_at.strftime('%d %B %Y') + diff --git a/apps/admin/views/projects/index.rb b/apps/admin/views/projects/index.rb index 73f3acf..47604ce 100644 --- a/apps/admin/views/projects/index.rb +++ b/apps/admin/views/projects/index.rb @@ -1,5 +1,9 @@ module Admin::Views::Projects class Index include Admin::View + + def link_to_github(project) + link_to project.name, "https://github.com/hanami/#{project.name}" + end end end diff --git a/lib/contributors/repositories/project_repository.rb b/lib/contributors/repositories/project_repository.rb index 49def70..781ec28 100644 --- a/lib/contributors/repositories/project_repository.rb +++ b/lib/contributors/repositories/project_repository.rb @@ -1,2 +1,5 @@ class ProjectRepository < Hanami::Repository + def sorted + projects.order { name.asc } + end end diff --git a/spec/admin/controllers/projects/index_spec.rb b/spec/admin/controllers/projects/index_spec.rb index e069da4..d0ba9cc 100644 --- a/spec/admin/controllers/projects/index_spec.rb +++ b/spec/admin/controllers/projects/index_spec.rb @@ -6,4 +6,34 @@ response = action.call(params) expect(response[0]).to eq 200 end + + describe 'expose' do + describe '#projects' do + context 'when db empty' do + before { action.call(params) } + + it { expect(action.projects.to_a).to eq [] } + end + + context 'when db has some projects' do + let(:project_repo) { ProjectRepository.new } + + before do + project_repo.create(name: 'contributors') + action.call(params) + end + + after do + project_repo.clear + end + + it 'returns all projects' do + projects = action.projects.to_a + + expect(projects).to all(be_a(Project)) + expect(projects.count).to eq 1 + end + end + end + end end diff --git a/spec/admin/views/projects/index_spec.rb b/spec/admin/views/projects/index_spec.rb index b2edbe6..fc3a40d 100644 --- a/spec/admin/views/projects/index_spec.rb +++ b/spec/admin/views/projects/index_spec.rb @@ -3,4 +3,12 @@ let(:template) { Hanami::View::Template.new('apps/admin/templates/projects/index.html.slim') } let(:view) { described_class.new(template, exposures) } let(:rendered) { view.render } + + describe '#link_to_github' do + let(:project) { Project.new(name: 'contributors') } + + it 'returns link to project github' do + expect(view.link_to_github(project).to_s).to eq 'contributors' + end + end end