Commit 1ea734898ee0b66b093bde6469d691215ca2c447
Committed by
Daniela Feitosa
1 parent
5c1641f3
Exists in
staging
and in
26 other branches
curriculum_lattes_plugin: Refactoring to use load_plugin_filters hotspot
Showing
18 changed files
with
198 additions
and
118 deletions
Show diff stats
app/controllers/admin/features_controller.rb
| ... | ... | @@ -17,10 +17,6 @@ class FeaturesController < AdminController |
| 17 | 17 | |
| 18 | 18 | def manage_fields |
| 19 | 19 | @person_fields = Person.fields |
| 20 | - @plugins.dispatch(:extra_person_fields).collect do |field| | |
| 21 | - @person_fields << field unless @person_fields.include?(field) | |
| 22 | - end | |
| 23 | - | |
| 24 | 20 | @enterprise_fields = Enterprise.fields |
| 25 | 21 | @community_fields = Community.fields |
| 26 | 22 | end | ... | ... |
app/controllers/my_profile/profile_editor_controller.rb
| ... | ... | @@ -16,21 +16,15 @@ class ProfileEditorController < MyProfileController |
| 16 | 16 | if request.post? |
| 17 | 17 | params[:profile_data][:fields_privacy] ||= {} if profile.person? && params[:profile_data].is_a?(Hash) |
| 18 | 18 | begin |
| 19 | - @plugins.dispatch(:profile_editor_transaction_extras) | |
| 20 | - | |
| 21 | 19 | Profile.transaction do |
| 22 | 20 | Image.transaction do |
| 23 | - if @profile_data.update_attributes(params[:profile_data]) | |
| 24 | - redirect_to :action => 'index', :profile => profile.identifier | |
| 25 | - else | |
| 26 | - profile.identifier = params[:profile] if profile.identifier.blank? | |
| 27 | - end | |
| 21 | + @plugins.dispatch(:profile_editor_transaction_extras) | |
| 22 | + @profile_data.update_attributes!(params[:profile_data]) | |
| 23 | + redirect_to :action => 'index', :profile => profile.identifier | |
| 28 | 24 | end |
| 29 | 25 | end |
| 30 | 26 | rescue Exception => ex |
| 31 | - if profile.identifier.blank? | |
| 32 | - profile.identifier = params[:profile] | |
| 33 | - end | |
| 27 | + profile.identifier = params[:profile] if profile.identifier.blank? | |
| 34 | 28 | end |
| 35 | 29 | end |
| 36 | 30 | end | ... | ... |
app/controllers/public/account_controller.rb
| ... | ... | @@ -93,13 +93,7 @@ class AccountController < ApplicationController |
| 93 | 93 | @user.terms_of_use = environment.terms_of_use |
| 94 | 94 | @user.environment = environment |
| 95 | 95 | @terms_of_use = environment.terms_of_use |
| 96 | - | |
| 97 | - params_profile_data = params[:profile_data] | |
| 98 | - @plugins.dispatch(:extra_person_data_params).each do |data| | |
| 99 | - params_profile_data = params_profile_data.merge(data) unless params[:profile_data].blank? | |
| 100 | - end | |
| 101 | - | |
| 102 | - @user.person_data = params_profile_data | |
| 96 | + @user.person_data = params[:profile_data] | |
| 103 | 97 | @user.return_to = session[:return_to] |
| 104 | 98 | @person = Person.new(params[:profile_data]) |
| 105 | 99 | @person.environment = @user.environment | ... | ... |
app/models/user.rb
| ... | ... | @@ -29,8 +29,6 @@ class User < ActiveRecord::Base |
| 29 | 29 | alias_method_chain :human_attribute_name, :customization |
| 30 | 30 | end |
| 31 | 31 | |
| 32 | - include Noosfero::Plugin::HotSpot | |
| 33 | - | |
| 34 | 32 | before_create do |user| |
| 35 | 33 | if user.environment.nil? |
| 36 | 34 | user.environment = Environment.default |
| ... | ... | @@ -48,7 +46,6 @@ class User < ActiveRecord::Base |
| 48 | 46 | p.environment = user.environment |
| 49 | 47 | p.name ||= user.name || user.login |
| 50 | 48 | p.visible = false unless user.activated? |
| 51 | - | |
| 52 | 49 | p.save! |
| 53 | 50 | |
| 54 | 51 | user.person = p | ... | ... |
db/schema.rb
| 1 | 1 | # encoding: UTF-8 |
| 2 | 2 | # This file is auto-generated from the current state of the database. Instead |
| 3 | 3 | # of editing this file, please use the migrations feature of Active Record to |
| 4 | +# incrementally modify your database, and then regenerate this schema definition. | |
| 4 | 5 | # |
| 5 | 6 | # Note that this schema.rb definition is the authoritative source for your |
| 6 | 7 | # database schema. If you need to create the application database on another | ... | ... |
features/step_definitions/noosfero_steps.rb
| ... | ... | @@ -762,3 +762,11 @@ When /^I confirm the "(.*)" dialog$/ do |confirmation| |
| 762 | 762 | assert_equal confirmation, a.text |
| 763 | 763 | a.accept |
| 764 | 764 | end |
| 765 | + | |
| 766 | +Given /^the field (.*) is public for all users$/ do |field| | |
| 767 | + Person.all.each do |person| | |
| 768 | + person.fields_privacy = Hash.new if person.fields_privacy.nil? | |
| 769 | + person.fields_privacy[field] = "public" | |
| 770 | + person.save! | |
| 771 | + end | |
| 772 | +end | |
| 765 | 773 | \ No newline at end of file | ... | ... |
lib/noosfero/plugin.rb
| ... | ... | @@ -537,23 +537,12 @@ class Noosfero::Plugin |
| 537 | 537 | nil |
| 538 | 538 | end |
| 539 | 539 | |
| 540 | - # -> Return a list of extra person fields | |
| 541 | - # returns = a list of strings with fields' name | |
| 542 | - def extra_person_fields | |
| 543 | - [] | |
| 544 | - end | |
| 545 | - | |
| 546 | 540 | # -> Return a list of hashs with the needed information to create optional fields |
| 547 | 541 | # returns = a list of hashs as {:name => "string", :label => "string", :object_name => :key, :method => :key} |
| 548 | 542 | def extra_optional_fields |
| 549 | 543 | [] |
| 550 | 544 | end |
| 551 | 545 | |
| 552 | - # -> Return a hash with another object's params | |
| 553 | - def extra_person_data_params | |
| 554 | - {} | |
| 555 | - end | |
| 556 | - | |
| 557 | 546 | # -> Adds additional blocks to profiles and environments. |
| 558 | 547 | # Your plugin must implements a class method called 'extra_blocks' |
| 559 | 548 | # that returns a hash with the following syntax. | ... | ... |
| ... | ... | @@ -0,0 +1,45 @@ |
| 1 | +README - Lattes Curriculum (LattesCurriculum Plugin) | |
| 2 | +================================ | |
| 3 | + | |
| 4 | +Lattes Curriculum is a plugin that allow users to show their academic informations in the wall, extracted from CNPQ's lattes plataform | |
| 5 | + | |
| 6 | +INSTALL | |
| 7 | +======= | |
| 8 | + | |
| 9 | +Enable Plugin | |
| 10 | +------------- | |
| 11 | + | |
| 12 | +Also, you need to enable LattesCurriculum Plugin on your Noosfero: | |
| 13 | + | |
| 14 | +cd <your_noosfero_dir> | |
| 15 | +./script/noosfero-plugins enable lattes_curriculum | |
| 16 | + | |
| 17 | +Active Plugin | |
| 18 | +------------- | |
| 19 | + | |
| 20 | +As a Noosfero administrator user, go to administrator panel: | |
| 21 | + | |
| 22 | +- Click on "Enable/disable plugins" option | |
| 23 | +- Click on "LattesCurriculumPlugin" check-box | |
| 24 | + | |
| 25 | +Running LattesCurriculum tests | |
| 26 | +-------------------- | |
| 27 | + | |
| 28 | +$ rake test:noosfero_plugins:lattes_curriculum | |
| 29 | + | |
| 30 | +LICENSE | |
| 31 | +======= | |
| 32 | + | |
| 33 | +Copyright (c) The Author developers. | |
| 34 | + | |
| 35 | +See Noosfero license. | |
| 36 | + | |
| 37 | + | |
| 38 | +AUTHORS | |
| 39 | +======= | |
| 40 | + | |
| 41 | +Jose Pedro (1jpsneto at gmail.com) | |
| 42 | +Thiago Kairala (thiagor.kairala at gmail.com) | |
| 43 | +Ana Paula Vargas (anapaulavnoronha at gmail.com) | |
| 44 | +Leandro Veloso (leandrovelosorodrigues at gmail.com) | |
| 45 | +Arthur Del Esposte (arthurmde at gmail.com) | |
| 0 | 46 | \ No newline at end of file | ... | ... |
plugins/lattes_curriculum/db/migrate/20140814210103_create_academic_infos.rb
| 1 | 1 | class CreateAcademicInfos < ActiveRecord::Migration |
| 2 | 2 | def self.up |
| 3 | - create_table :academic_infos do |t| | |
| 4 | - t.references :person | |
| 3 | + create_table :academic_infos do |t| | |
| 4 | + t.references :person | |
| 5 | 5 | t.column :lattes_url, :string |
| 6 | 6 | end |
| 7 | - end | |
| 7 | + end | |
| 8 | 8 | |
| 9 | 9 | def self.down |
| 10 | 10 | drop_table :academic_infos | ... | ... |
plugins/lattes_curriculum/features/lattes_curriculum.feature
| ... | ... | @@ -7,55 +7,43 @@ Feature: import lattes information |
| 7 | 7 | Given "LattesCurriculumPlugin" plugin is enabled |
| 8 | 8 | And I am logged in as admin |
| 9 | 9 | And I go to /admin/plugins |
| 10 | - And I check "LattesCurriculumPlugin" | |
| 10 | + And I check "Lattes Curriculum Plugin" | |
| 11 | 11 | And I press "Save changes" |
| 12 | 12 | And I go to /admin/features/manage_fields |
| 13 | 13 | Given I follow "Person's fields" |
| 14 | 14 | And I check "person_fields_lattes_url_active" |
| 15 | 15 | And I check "person_fields_lattes_url_signup" |
| 16 | 16 | And I press "save_person_fields" |
| 17 | - And feature "skip_new_user_email_confirmation" is enabled on environment | |
| 18 | - And I am not logged in | |
| 19 | 17 | |
| 20 | - @selenium | |
| 21 | - Scenario: Import lattes informations after singup | |
| 22 | - Given I am on signup page | |
| 23 | - When I fill in "e-Mail" with "josesilva@example.com" | |
| 24 | - And I fill in "Username" with "josesilva" | |
| 25 | - And I fill in "Full name" with "João Silva" | |
| 26 | - And I fill in "Password" with "secret" | |
| 27 | - And I fill in "Password confirmation" with "secret" | |
| 18 | + Scenario: Don't accept edit the profile with invalid lattes url | |
| 19 | + Given I am on admin_user's control panel | |
| 20 | + When I follow "Edit Profile" | |
| 21 | + And I fill in "Lattes URL" with "http://youtube.com.br/" | |
| 22 | + And I press "Save" | |
| 23 | + Then I should see "Academic info lattes url is invalid" | |
| 24 | + | |
| 25 | + Scenario: Import lattes informations | |
| 26 | + Given I am on admin_user's control panel | |
| 27 | + And the field lattes_url is public for all users | |
| 28 | + When I follow "Edit Profile" | |
| 28 | 29 | And I fill in "Lattes URL" with "http://lattes.cnpq.br/2864976228727880" |
| 29 | - And wait for the captcha signup time | |
| 30 | - And I press "Create my account" | |
| 31 | - And I go to /profile/josesilva | |
| 32 | - And I follow "Lattes" within "#ui-tabs-anchor" | |
| 30 | + And I press "Save" | |
| 31 | + And I go to /profile/admin_user#lattes_tab | |
| 33 | 32 | Then I should see "Endereço para acessar este CV: http://lattes.cnpq.br/2864976228727880" |
| 34 | 33 | |
| 35 | - @selenium | |
| 36 | 34 | Scenario: Don't show lattes informations for blank lattes urls |
| 37 | - Given I am on signup page | |
| 38 | - When I fill in "e-Mail" with "josesilva@example.com" | |
| 39 | - And I fill in "Username" with "josesilva" | |
| 40 | - And I fill in "Full name" with "João Silva" | |
| 41 | - And I fill in "Password" with "secret" | |
| 42 | - And I fill in "Password confirmation" with "secret" | |
| 43 | - And wait for the captcha signup time | |
| 44 | - And I press "Create my account" | |
| 45 | - And I go to /profile/josesilva | |
| 46 | - Then I should not see "Lattes" within "#ui-tabs-anchor" | |
| 35 | + Given I am on admin_user's control panel | |
| 36 | + And the field lattes_url is public for all users | |
| 37 | + When I follow "Edit Profile" | |
| 38 | + And I press "Save" | |
| 39 | + And I go to /profile/admin_user | |
| 40 | + Then I should not see "Lattes" | |
| 47 | 41 | |
| 48 | - @selenium | |
| 49 | 42 | Scenario: Inform problem if the informed lattes doesn't exist |
| 50 | - Given I am on signup page | |
| 51 | - When I fill in "e-Mail" with "josesilva@example.com" | |
| 52 | - And I fill in "Username" with "josesilva" | |
| 53 | - And I fill in "Full name" with "João Silva" | |
| 54 | - And I fill in "Password" with "secret" | |
| 55 | - And I fill in "Password confirmation" with "secret" | |
| 43 | + Given I am on admin_user's control panel | |
| 44 | + And the field lattes_url is public for all users | |
| 45 | + When I follow "Edit Profile" | |
| 56 | 46 | And I fill in "Lattes URL" with "http://lattes.cnpq.br/123456" |
| 57 | - And wait for the captcha signup time | |
| 58 | - And I press "Create my account" | |
| 59 | - And I go to /profile/josesilva | |
| 60 | - And I follow "Lattes" within "#ui-tabs-anchor" | |
| 47 | + And I press "Save" | |
| 48 | + And I go to /profile/admin_user#lattes_tab | |
| 61 | 49 | Then I should see "Lattes not found. Please, make sure the informed URL is correct." |
| 62 | 50 | \ No newline at end of file | ... | ... |
plugins/lattes_curriculum/lib/academic_info.rb
| 1 | 1 | class AcademicInfo < ActiveRecord::Base |
| 2 | 2 | |
| 3 | - belongs_to :person | |
| 3 | + belongs_to :person | |
| 4 | 4 | |
| 5 | - attr_accessible :lattes_url | |
| 5 | + attr_accessible :lattes_url | |
| 6 | 6 | validate :lattes_url_validate? |
| 7 | 7 | |
| 8 | 8 | def lattes_url_validate? |
| 9 | - valid_url_start = 'http://lattes.cnpq.br/' | |
| 10 | - unless self.lattes_url.blank? || self.lattes_url =~ /http:\/\/lattes.cnpq.br\/\d+/ | |
| 11 | - self.errors.add(:lattes_url, _("Sorry, the lattes url is not valid.")) | |
| 9 | + unless AcademicInfo.matches?(self.lattes_url) | |
| 10 | + self.errors.add(:lattes_url, _(" is invalid.")) | |
| 12 | 11 | end |
| 13 | 12 | end |
| 13 | + | |
| 14 | + def self.matches?(info) | |
| 15 | + lattes = nil | |
| 16 | + if info.class == String | |
| 17 | + lattes = info | |
| 18 | + elsif info.class == Hash | |
| 19 | + lattes = info[:lattes_url] | |
| 20 | + end | |
| 21 | + return lattes.blank? || lattes =~ /^http:\/\/lattes.cnpq.br\/\d+$/ | |
| 22 | + end | |
| 14 | 23 | end | ... | ... |
plugins/lattes_curriculum/lib/ext/person.rb
plugins/lattes_curriculum/lib/html_parser.rb
| ... | ... | @@ -6,8 +6,8 @@ Encoding.default_external = Encoding::UTF_8 |
| 6 | 6 | Encoding.default_internal = Encoding::UTF_8 |
| 7 | 7 | |
| 8 | 8 | class Html_parser |
| 9 | - def get_html(lattes_link = "") | |
| 10 | - begin | |
| 9 | + def get_html(lattes_link = "") | |
| 10 | + begin | |
| 11 | 11 | page = Nokogiri::HTML(open(lattes_link), nil, "UTF-8") |
| 12 | 12 | page = page.css(".main-content").to_s() |
| 13 | 13 | page = remove_class_tooltip(page) |
| ... | ... | @@ -17,8 +17,10 @@ class Html_parser |
| 17 | 17 | page = remove_further_informations(page) |
| 18 | 18 | rescue OpenURI::HTTPError => e |
| 19 | 19 | page = _("Lattes not found. Please, make sure the informed URL is correct.") |
| 20 | - end | |
| 21 | - end | |
| 20 | + rescue Timeout::Error => e | |
| 21 | + page = _("Lattes Platform is unreachable. Please, try it later.") | |
| 22 | + end | |
| 23 | + end | |
| 22 | 24 | |
| 23 | 25 | def remove_class_tooltip(page = "") |
| 24 | 26 | while page.include? 'class="tooltip"' do | ... | ... |
plugins/lattes_curriculum/lib/lattes_curriculum_plugin.rb
| 1 | 1 | class LattesCurriculumPlugin < Noosfero::Plugin |
| 2 | 2 | |
| 3 | 3 | def self.plugin_name |
| 4 | - "LattesCurriculumPlugin" | |
| 4 | + "Lattes Curriculum Plugin" | |
| 5 | 5 | end |
| 6 | 6 | |
| 7 | 7 | def self.plugin_description |
| ... | ... | @@ -17,10 +17,6 @@ class LattesCurriculumPlugin < Noosfero::Plugin |
| 17 | 17 | end |
| 18 | 18 | |
| 19 | 19 | def extra_optional_fields |
| 20 | - if context.profile && context.profile.person? && context.profile.academic_info.nil? | |
| 21 | - context.profile.academic_info = AcademicInfo.new | |
| 22 | - end | |
| 23 | - | |
| 24 | 20 | fields = [] |
| 25 | 21 | |
| 26 | 22 | lattes_url = { |
| ... | ... | @@ -36,20 +32,8 @@ class LattesCurriculumPlugin < Noosfero::Plugin |
| 36 | 32 | return fields |
| 37 | 33 | end |
| 38 | 34 | |
| 39 | - def extra_person_fields | |
| 40 | - fields = [] | |
| 41 | - | |
| 42 | - fields << "lattes_url" | |
| 43 | - | |
| 44 | - return fields | |
| 45 | - end | |
| 46 | - | |
| 47 | - def extra_person_data_params | |
| 48 | - {"academic_info_attributes" => context.params[:academic_infos]} | |
| 49 | - end | |
| 50 | - | |
| 51 | 35 | def profile_tabs |
| 52 | - unless context.profile.academic_info.nil? || context.profile.academic_info.lattes_url.blank? | |
| 36 | + if show_lattes_tab? | |
| 53 | 37 | href = context.profile.academic_info.lattes_url |
| 54 | 38 | html_parser = Html_parser.new |
| 55 | 39 | { |
| ... | ... | @@ -69,6 +53,78 @@ class LattesCurriculumPlugin < Noosfero::Plugin |
| 69 | 53 | end |
| 70 | 54 | end |
| 71 | 55 | |
| 56 | + def profile_editor_controller_filters | |
| 57 | + validate_lattes_url_block = proc do | |
| 58 | + if request.post? | |
| 59 | + if !params[:academic_infos].blank? | |
| 60 | + @profile_data = profile | |
| 61 | + | |
| 62 | + academic_infos = {"academic_info_attributes" => params[:academic_infos]} | |
| 63 | + | |
| 64 | + params_profile_data = params[:profile_data] | |
| 65 | + params_profile_data = params_profile_data.merge(academic_infos) | |
| 66 | + | |
| 67 | + @profile_data.attributes = params_profile_data | |
| 68 | + @profile_data.valid? | |
| 69 | + | |
| 70 | + @possible_domains = profile.possible_domains | |
| 71 | + | |
| 72 | + unless AcademicInfo.matches?(params[:academic_infos]) | |
| 73 | + @profile_data.errors.add(:lattes_url, _(' Invalid lattes url')) | |
| 74 | + render :action => :edit, :profile => profile.identifier | |
| 75 | + end | |
| 76 | + end | |
| 77 | + end | |
| 78 | + end | |
| 79 | + | |
| 80 | + create_academic_info_block = proc do | |
| 81 | + if profile && profile.person? && profile.academic_info.nil? | |
| 82 | + profile.academic_info = AcademicInfo.new | |
| 83 | + end | |
| 84 | + end | |
| 85 | + | |
| 86 | + [{:type => 'before_filter', | |
| 87 | + :method_name => 'validate_lattes_url', | |
| 88 | + :options => {:only => 'edit'}, | |
| 89 | + :block => validate_lattes_url_block }, | |
| 90 | + {:type => 'before_filter', | |
| 91 | + :method_name => 'create_academic_info', | |
| 92 | + :options => {:only => 'edit'}, | |
| 93 | + :block => create_academic_info_block }] | |
| 94 | + end | |
| 95 | + | |
| 96 | + def account_controller_filters | |
| 97 | + validate_lattes_url_block = proc do | |
| 98 | + if request.post? | |
| 99 | + params[:profile_data] ||= {} | |
| 100 | + params[:profile_data][:academic_info_attributes] = params[:academic_infos] | |
| 101 | + | |
| 102 | + if !params[:academic_infos].blank? && !AcademicInfo.matches?(params[:academic_infos]) | |
| 103 | + @person = Person.new(params[:profile_data]) | |
| 104 | + @person.environment = environment | |
| 105 | + @user = User.new(params[:user]) | |
| 106 | + @person.errors.add(:lattes_url, _(' Invalid lattes url')) | |
| 107 | + render :action => :signup | |
| 108 | + end | |
| 109 | + end | |
| 110 | + end | |
| 111 | + | |
| 112 | + create_academic_info_block = proc do | |
| 113 | + if profile && profile.person? && profile.academic_info.nil? | |
| 114 | + profile.academic_info = AcademicInfo.new | |
| 115 | + end | |
| 116 | + end | |
| 117 | + | |
| 118 | + [{:type => 'before_filter', | |
| 119 | + :method_name => 'validate_lattes_url', | |
| 120 | + :options => {:only => 'signup'}, | |
| 121 | + :block => validate_lattes_url_block }, | |
| 122 | + {:type => 'before_filter', | |
| 123 | + :method_name => 'create_academic_info', | |
| 124 | + :options => {:only => 'edit'}, | |
| 125 | + :block => create_academic_info_block }] | |
| 126 | + end | |
| 127 | + | |
| 72 | 128 | protected |
| 73 | 129 | |
| 74 | 130 | def academic_info_transaction |
| ... | ... | @@ -77,4 +133,7 @@ class LattesCurriculumPlugin < Noosfero::Plugin |
| 77 | 133 | end |
| 78 | 134 | end |
| 79 | 135 | |
| 136 | + def show_lattes_tab? | |
| 137 | + return context.profile.person? && !context.profile.academic_info.nil? && !context.profile.academic_info.lattes_url.blank? && context.profile.public_fields.include?("lattes_url") | |
| 138 | + end | |
| 80 | 139 | end | ... | ... |
plugins/lattes_curriculum/public/singup_complement.js
| 1 | 1 | jQuery(function($){ |
| 2 | - $(document).ready(function(){ | |
| 3 | - $('#lattes_id_field').blur(function(){ | |
| 4 | - var value = this.value | |
| 5 | - }) | |
| 2 | + $(document).ready(function(){ | |
| 3 | + $('#lattes_id_field').blur(function(){ | |
| 4 | + var value = this.value | |
| 5 | + }) | |
| 6 | 6 | |
| 7 | - $('#lattes_id_field').focus(function(){ | |
| 8 | - $('#lattes-id-balloon').fadeIn('slow') | |
| 9 | - }) | |
| 7 | + $('#lattes_id_field').focus(function(){ | |
| 8 | + $('#lattes-id-balloon').fadeIn('slow') | |
| 9 | + }) | |
| 10 | 10 | |
| 11 | - $('#lattes_id_field').blur(function(){ | |
| 12 | - $('#lattes-id-balloon').fadeOut('slow') | |
| 13 | - }) | |
| 14 | - }) | |
| 11 | + $('#lattes_id_field').blur(function(){ | |
| 12 | + $('#lattes-id-balloon').fadeOut('slow') | |
| 13 | + }) | |
| 14 | + }) | |
| 15 | 15 | }) |
| 16 | 16 | \ No newline at end of file | ... | ... |
plugins/lattes_curriculum/test/unit/academic_info_test.rb
plugins/lattes_curriculum/test/unit/html_parser_test.rb
plugins/lattes_curriculum/test/unit/lattes_curriculum_test.rb
| ... | ... | @@ -11,7 +11,7 @@ class LattesCurriculumPluginTest < ActiveSupport::TestCase |
| 11 | 11 | end |
| 12 | 12 | |
| 13 | 13 | should 'have name' do |
| 14 | - assert_equal 'LattesCurriculumPlugin', LattesCurriculumPlugin.plugin_name | |
| 14 | + assert_equal 'Lattes Curriculum Plugin', LattesCurriculumPlugin.plugin_name | |
| 15 | 15 | end |
| 16 | 16 | |
| 17 | 17 | should 'have description' do |
| ... | ... | @@ -21,5 +21,4 @@ class LattesCurriculumPluginTest < ActiveSupport::TestCase |
| 21 | 21 | should 'have stylesheet' do |
| 22 | 22 | assert @plugin.stylesheet? |
| 23 | 23 | end |
| 24 | - | |
| 25 | 24 | end | ... | ... |