require 'rpi_marca/publication'
require 'rpi_marca/exceptions'
require 'nokogiri'
describe RpiMarca::Publication do
# rubocop:disable Metrics/LineLength
PUBLICACAO_PROTOCOLO_COMPLETO = <<-XML
Protocolo: 810110405339 (17/03/2011) Petição (tipo): Anotação de transferência de titularidade decorrente de cisão (349.2) Procurador: CUSTODIO DE ALMEIDA CIA Cedente: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. [BR] Cessionário: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. Detalhes do despacho: ok!
PICOSSE E CALABRESE ADVOGADOS ASSOCIADOS
XML
PUBLICACAO_DOIS_DESPACHOS = <<-XML
Protocolo: 810110405339 (17/03/2011) Petição (tipo): Anotação de transferência de titularidade decorrente de cisão (349.2) Procurador: CUSTODIO DE ALMEIDA CIA Cedente: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. [BR] Cessionário: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. Detalhes do despacho: ok!
XML
PUBLICACAO_SEM_PROTOCOLO = <<-XML
Sobrestadores: Processo: 823129900 (MÓDULO E-SECURITY)
XML
TEXTO_COMPLEMENTAR_COM_PROTOCOLO = <<-XML
850130127025 de 02/07/2013, 850130131596 de 08/07/2013 e 850130122879 de 28/06/2013
XML
PROCURADOR_SEM_PROTOCOLO = <<-XML
Sobrestadores: Processo: 823129900 (MÓDULO E-SECURITY)
LAURA GARKISCH MOREIRA
XML
DEPOSITO = <<-XML
por alteração na especificação
MC FARLANE TOYS
COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;
SEM DIREITO AO USO EXCLUSIVO DA EXPRESSÃO "TOYS".
ABM ASSESSORIA BRASILEIRA DE MARCAS LTDA.
XML
DEPOSITO_MARCA_FIGURATIVA = <<-XML
por alteração na especificação
COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;
SEM DIREITO AO USO EXCLUSIVO DA EXPRESSÃO "TOYS".
ABM ASSESSORIA BRASILEIRA DE MARCAS LTDA.
XML
DEPOSITO_MARCA_CERTIFIC = <<-XML
istart escola digital segura
Certificação de A fim de promover sua missão junto às instituições de ensino, o i. Start desenvolveu o selo escola digital segura, uma ação pioneira de responsabilidade social digital. O selo escola digital segura auxilia a direção a incorporar as tecnologias da informação e comunicação ao ambiente escolar e implantar o uso seguro dos recursos de tecnologia educacional identificando e mitigando possíveis incidentes digitais. Assim o i. Start promove o reconhecimento das instituições de ensino que investem em infraestrutura, formulam e aplicam regulamentos e procedimentos para gestão da informação e dos recursos de tecnologia da informação e comunicação e ainda formam alunos e educadores para segurança da informação e ética digital. Diante desse cenário, o selo escola digital segura reconhece o valor das instituições de ensino que se comprometem com a orientação sobre ética e segurança digital, com indicadores distribuídos em quatro níveis: infraestrutura tecnológica, elaboração de regras e procedimentos quanto ao uso da tecnologia, capacitação de colaboradores e docentes e conscientização do corpo discente e de toda a comunidade relacionada. A conquista do certificado é simbolizada, em cada um dos níveis avaliados, pelo ¿selo escola digital segura¿, que permite à instituição de ensino dar publicidade aos esforços envidados no processo educacional para garantir o uso ético, seguro e legal da tecnologia.;
Diego Perez Martin de Almeida
XML
DEPOSITO_NCL_SEM_EDICAO = <<-XML
por alteração na especificação
COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;
XML
PUBLICACAO_COM_CLASSE_NACIONAL = <<-XML
por alteração na especificação
Teste
XML
CLASSE_NACIONAL_MAIS_DE_3_SUBCLASSES = <<-XML
por alteração na especificação
Teste
XML
CLASSE_LOGOTIPO_MAIS_DE_5_SUBCLASSES = <<-XML
por alteração na especificação
XML
PRIORIDADE_UNIONISTA_SEM_DATA = <<-XML
por alteração na especificação
XML
CONCESSAO_REGISTRO = <<-XML
XML
CONCESSAO_REGISTRO_SEM_DATA_CONCESSAO = <<-XML
XML
CONCESSAO_REGISTRO_SEM_DATA_VIGENCIA = <<-XML
XML
PUBLICACAO_ELEMENTO_NOVO_INVALIDO = <<-XML
XML
# rubocop:enable Metrics/LineLength
it 'aceita uma string contendo a publicação' do
publication = DEPOSITO
expect { RpiMarca::Publication.new(publication) }.not_to raise_error
end
it 'aceita um objeto `Nokogiri::XML::Element` contendo a publicação' do
publication = Nokogiri::XML(DEPOSITO).at_xpath('//processo')
expect { RpiMarca::Publication.new(publication) }.not_to raise_error
end
it 'erro ao instanciar com informações de publicação inválidas' do
class Foo; end
expect { RpiMarca::Publication.new(Foo.new) }
.to raise_error RpiMarca::ParseError
end
it 'erro quando um elemento novo/inválido for publicado' do
expect { RpiMarca::Publication.new(PUBLICACAO_ELEMENTO_NOVO_INVALIDO) }
.to raise_error RpiMarca::ParseError
end
context 'processo' do
it 'número é identificado corretamente' do
publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
expect(publication.application).to eq '829142282'
end
it 'erro quando número não é identificado' do
expect { RpiMarca::Publication.new('') }
.to raise_error(RpiMarca::ParseError)
end
it 'pode ter data de deposito' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.filed_on).to eq Date.new(2008, 8, 25)
end
it 'pode ter data de concessão e vigência' do
publication = RpiMarca::Publication.new(CONCESSAO_REGISTRO)
expect(publication.granted_on).to eq Date.new(2013, 5, 10)
expect(publication.expires_on).to eq Date.new(2023, 5, 10)
end
it 'se tiver data de concessão deve ter data de vigência' do
expect { RpiMarca::Publication.new(CONCESSAO_REGISTRO_SEM_DATA_VIGENCIA) }
.to raise_error(RpiMarca::ParseError)
end
it 'se tiver data de vigência deve ter data de concessao' do
publication = CONCESSAO_REGISTRO_SEM_DATA_CONCESSAO
expect { RpiMarca::Publication.new(publication) }
.to raise_error(RpiMarca::ParseError)
end
end
context 'lista de despachos' do
it 'erro quando nenhum é publicado' do
publication = <<-XML
XML
expect { RpiMarca::Publication.new(publication) }
.to raise_error(RpiMarca::ParseError)
end
it 'publicação com um despacho identificado corretamente' do
publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
expect(publication.rules.length).to eq 1
end
it 'publicação com 2 despachos identificados corretamente' do
publication = RpiMarca::Publication.new(PUBLICACAO_DOIS_DESPACHOS)
expect(publication.rules.length).to eq 2
end
end
context 'despacho' do
it 'erro quando não possuir código IPAS' do
publication = <<-XML
XML
expect { RpiMarca::Publication.new(publication) }
.to raise_error(RpiMarca::ParseError)
end
it 'erro quando não possuir descrição do código IPAS' do
publication = <<-XML
XML
expect { RpiMarca::Publication.new(publication) }
.to raise_error(RpiMarca::ParseError)
end
it 'primeiro despacho tem dados corretos' do
publication = RpiMarca::Publication.new(PUBLICACAO_DOIS_DESPACHOS)
rule = publication.rules.first
expect(rule.ipas).to eq 'IPAS270'
expect(rule.receipt.number).to eq '810110405339'
expect(rule.receipt.date).to eq Date.new(2013, 7, 1)
expect(rule.complement)
.to eq 'Protocolo: 810110405339 (17/03/2011) Petição (tipo): Anotação' \
' de transferência de titularidade decorrente de cisão (349.2) ' \
'Procurador: CUSTODIO DE ALMEIDA CIA Cedente: I-PARK SOLUÇÕES ' \
'TECNOLÓGICAS S.A. [BR] Cessionário: I-PARK SOLUÇÕES TECNOLÓGICAS ' \
'S.A. Detalhes do despacho: ok!'
end
it 'segundo despacho tem dados corretos' do
publication = RpiMarca::Publication.new(PUBLICACAO_DOIS_DESPACHOS)
rule = publication.rules[1] # segundo
expect(rule.ipas).to eq 'IPAS009'
expect(rule.receipt.number).to eq '1010101010101010'
expect(rule.receipt.date).to eq Date.new(2012, 12, 1)
expect(rule.complement).to be_nil
end
end
context 'protocolo' do
it 'deve ter número de protocolo' do
# rubocop:disable Metrics/LineLength
xml = <<-XML
XML
# rubocop:enable Metrics/LineLength
expect { RpiMarca::Publication.new(xml) }
.to raise_error(RpiMarca::ParseError)
end
it 'deve ter data de protocolo' do
# rubocop:disable Metrics/LineLength
xml = <<-XML
XML
# rubocop:enable Metrics/LineLength
expect { RpiMarca::Publication.new(xml) }
.to raise_error(RpiMarca::ParseError)
end
it 'protocolo tem dados corretos' do
publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
rule = publication.rules.first
receipt = rule.receipt
expect(receipt.number).to eq '810110405339'
expect(receipt.date).to eq Date.new(2009, 11, 12)
expect(receipt.service_code).to eq '337.1'
end
it 'pode ter texto complementar' do
# rubocop:disable Metrics/LineLength
xml = <<-XML
850130127025 de 02/07/2013, 850130131596 de 08/07/2013 e 850130122879 de 28/06/2013
XML
# rubocop:enable Metrics/LineLength
publication = RpiMarca::Publication.new(xml)
rule = publication.rules.first
expect(rule.complement).to eq '850130127025 de 02/07/2013, ' \
'850130131596 de 08/07/2013 e 850130122879 de 28/06/2013'
end
it 'texto complementar pode conter outros protocolos' do
publication = RpiMarca::Publication.new(TEXTO_COMPLEMENTAR_COM_PROTOCOLO)
rule = publication.rules.last
expect(rule.complementary_receipts.length).to eq 3
receipt1 = rule.complementary_receipts.first
expect(receipt1.number).to eq '850130127025'
expect(receipt1.date).to eq Date.new(2013, 7, 2)
receipt3 = rule.complementary_receipts.last
expect(receipt3.number).to eq '850130122879'
expect(receipt3.date).to eq Date.new(2013, 6, 28)
end
it 'pode ter procurador' do
publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
rule = publication.rules.first
receipt = rule.receipt
expect(receipt.agent)
.to eq 'PICOSSE E CALABRESE ADVOGADOS ASSOCIADOS'
end
it 'pode ter requerente' do
publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
rule = publication.rules.first
receipt = rule.receipt
applicant = receipt.applicant
expect(applicant.name)
.to eq 'G.A.R. GESTÃO E ADMINISTRAÇÃO E RODOVIAS LTDA'
expect(applicant.country).to eq 'BR'
expect(applicant.state).to eq 'SP'
end
it 'pode ter cedente e cessionário' do
publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
rule = publication.rules.first
receipt = rule.receipt
assignor = receipt.assignor
assignee = receipt.assignee
expect(assignor).not_to be_nil
expect(assignor.name)
.to eq 'K.V.M. COMÉRCIO E CONFECÇÕES LTDA-EPP'
expect(assignor.country).to eq 'BR'
expect(assignor.state).to eq 'SP'
expect(assignee).not_to be_nil
expect(assignee.name)
.to eq 'K.V.M. COMÉRCIO E CONFECÇÕES LTDA-EPP'
expect(assignee.country).to be_nil
expect(assignee.state).to be_nil
end
end
context 'classificação NCL, nacional e de logotipo' do
it 'pode ter classificação NCL' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.ncl).not_to be_nil
expect(publication.ncl.number).to eq '35'
expect(publication.ncl.edition).to eq 10
expect(publication.ncl.goods_services)
.to eq 'COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ' \
'ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A ' \
'PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;'
end
it 'classificação NCL pode vir sem edição' do
publication = RpiMarca::Publication.new(DEPOSITO_NCL_SEM_EDICAO)
expect(publication.ncl).not_to be_nil
expect(publication.ncl.number).to eq '35'
expect(publication.ncl.edition).to be_nil
expect(publication.ncl.goods_services)
.to eq 'COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ' \
'ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A ' \
'PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;'
end
it 'pode ter classificação nacional' do
publication = RpiMarca::Publication.new(PUBLICACAO_COM_CLASSE_NACIONAL)
expect(publication.national_class).not_to be_nil
expect(publication.national_class.number).to eq 25
expect(publication.national_class.subclass1).to eq 10
expect(publication.national_class.subclass2).to eq 20
expect(publication.national_class.subclass3).to eq nil
expect(publication.national_class.goods_services).to eq 'Teste'
end
it 'retorna a classificação nacional formatada' do
publication = RpiMarca::Publication.new(PUBLICACAO_COM_CLASSE_NACIONAL)
expect(publication.national_class.to_s).to eq '25/10.20'
end
it 'classificação nacional não pode ter mais de 3 subclasses' do
expect { RpiMarca::Publication.new(CLASSE_NACIONAL_MAIS_DE_3_SUBCLASSES) }
.to raise_error(RpiMarca::ParseError)
end
it 'pode ter classificação de logotipo' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.vienna_class).not_to be_nil
expect(publication.vienna_class.edition).to eq 4
expect(publication.vienna_class.subclass1).to eq '27.5.1'
expect(publication.vienna_class.subclass2).to eq '27.7.1'
expect(publication.vienna_class.subclass3).to be_nil
expect(publication.vienna_class.subclass4).to be_nil
expect(publication.vienna_class.subclass5).to be_nil
end
it 'retorna a classificação de logotipo formatada' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.vienna_class.to_s).to eq '27.5.1 / 27.7.1'
end
it 'classificação de logotipo não pode ter mais de 5 classes' do
expect { RpiMarca::Publication.new(CLASSE_LOGOTIPO_MAIS_DE_5_SUBCLASSES) }
.to raise_error(RpiMarca::ParseError)
end
end
context 'publicação' do
it 'pode ter titulares' do
publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
expect(publication.owners).not_to be_empty
end
it 'primeiro titular tem dados corretos' do
publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
owner = publication.owners.first
expect(owner.name)
.to eq 'DIGITAL 21 PRODUÇÕES ARTISTICAS LTDA'
expect(owner.country).to eq 'BR'
expect(owner.state).to eq 'SP'
end
it 'segundo titular tem dados corretos' do
publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
owner = publication.owners.last
expect(owner.name)
.to eq 'BROOKFIELD RIO DE JANEIRO EMPREENDIMENTOS IMOBILIÁRIOS S/A.'
expect(owner.country).to eq 'BR'
expect(owner.state).to eq 'RJ'
end
it 'pode ter marca' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.trademark).to eq 'MC FARLANE TOYS'
end
it 'não tem marca quando for Figurativa ou Tridimensional' do
publication = RpiMarca::Publication.new(DEPOSITO_MARCA_FIGURATIVA)
expect(publication.trademark).to be_nil
end
it 'pode ter apresentação' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.kind).to eq 'Mista'
end
it 'pode ter natureza' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.nature).to eq 'De Serviço'
end
it "natureza 'Certificação' é normalizada" do
publication = RpiMarca::Publication.new(DEPOSITO_MARCA_CERTIFIC)
expect(publication.nature).to eq 'Certificação'
end
it 'pode ter procurador' do
publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
expect(publication.agent).to eq 'LAURA GARKISCH MOREIRA'
end
it 'pode ter apostila' do
publication = RpiMarca::Publication.new(DEPOSITO)
expect(publication.disclaimer)
.to eq 'SEM DIREITO AO USO EXCLUSIVO DA EXPRESSÃO "TOYS".'
end
it 'pode ter prioridade unionista' do
publication = RpiMarca::Publication.new(DEPOSITO)
priority = publication.priorities.first
expect(priority).not_to be_nil
expect(priority.number).to eq 'CTM 010645091'
expect(priority.date).to eq Date.new(2012, 2, 15)
expect(priority.country).to eq 'IT'
end
it 'prioridade unionista deve ter data da prioridade' do
expect { RpiMarca::Publication.new(PRIORIDADE_UNIONISTA_SEM_DATA) }
.to raise_error(RpiMarca::ParseError)
end
it 'pode ter processos sobrestadores' do
publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
previous_applications = publication.previous_applications
expect(previous_applications).not_to be_nil
previous_application = previous_applications.first
expect(previous_application.application).to eq '823129900'
expect(previous_application.trademark).to eq 'MÓDULO E-SECURITY'
end
end
end