plonegovbr/brasil.gov.tiles

Corrigir teste quando se utiliza collective.cover 1.0a11

Closed this issue · 6 comments

Quando utilizamos o collective.cover 1.0a11 ocorre erro nos testes:

Running brasil.gov.tiles.testing.brasil.gov.tiles:Integration tests:
  Set up plone.testing.zca.LayerCleanup in 0.000 seconds.
  Set up plone.testing.z2.Startup in 0.177 seconds.
  Set up plone.app.testing.layers.PloneFixture in 7.582 seconds.
  Set up brasil.gov.tiles.testing.Fixture/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/layout_templates/generalmarkup.pt
  warnings.warn(msg, UserWarning, 1)
/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/browser/contentchooser_templates/tree_template.pt
  warnings.warn(msg, UserWarning, 1)
/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/layout_templates/tile.pt
  warnings.warn(msg, UserWarning, 1)
/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/layout_templates/group.pt
  warnings.warn(msg, UserWarning, 1)
/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/layout_templates/row.pt
  warnings.warn(msg, UserWarning, 1)
/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/browser/contentchooser_templates/search_list.pt
  warnings.warn(msg, UserWarning, 1)
/home/user/cache-python/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/layout_templates/tileselect.pt
  warnings.warn(msg, UserWarning, 1)
 in 10.342 seconds.
  Set up brasil.gov.tiles.testing.brasil.gov.tiles:Integration in 0.000 seconds.
  Running:
    46/74 (62.2%)

Error in test test_crud (brasil.gov.tiles.tests.test_destaque_tile.DestaqueTileTestCase)
Traceback (most recent call last):
  File "/home/user/pythons/python279/lib/python2.7/unittest/case.py", line 329, in run
    testMethod()
  File "/home/user/sites/portal.buildout/src/brasil.gov.tiles/src/brasil/gov/tiles/tests/test_destaque_tile.py", line 73, in test_crud
    tile.remove_item(obj3.UID())
  File "/home/user/sites/portal.buildout/src/brasil.gov.tiles/src/brasil/gov/tiles/tiles/destaque.py", line 120, in remove_item
    super(DestaqueTile, self).remove_item(uid)
  File "/home/user/cache-python/eggs/collective.cover-1.0a11-py2.7.egg/collective/cover/tiles/list.py", line 253, in remove_item
    if uid in uuids.keys():
AttributeError: 'list' object has no attribute 'keys'


  Ran 74 tests with 0 failures and 1 errors in 5.672 seconds.
Running brasil.gov.tiles.testing.brasil.gov.tiles:Robot tests:
  Tear down brasil.gov.tiles.testing.brasil.gov.tiles:Integration in 0.000 seconds.
  Set up plone.app.robotframework.remote.AutoLoginRemoteLibrary:RobotRemote in 0.005 seconds.
  Set up plone.testing.z2.ZServer in 0.502 seconds.
  Set up brasil.gov.tiles.testing.brasil.gov.tiles:Robot in 0.000 seconds.
  Running:
    1/2 (50.0%)   
==============================================================================
Test Mediacarousel Tile                                                       
==============================================================================
Test Mediacarousel Tile                                               
2015-09-21 17:21:06,372 - Zope.SiteErrorLog - ERROR - 1442866866.370.671579113898 http://localhost:55001/plone/++add++collective.cover.content
Traceback (innermost last):
  Module ZPublisher.Publish, line 138, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module plone.z3cform.layout, line 66, in __call__
  Module plone.z3cform.layout, line 60, in update
  Module z3c.form.form, line 266, in render
  Module z3c.form.form, line 161, in render
  Module zope.browserpage.viewpagetemplatefile, line 51, in __call__
  Module zope.pagetemplate.pagetemplate, line 132, in pt_render
  Module five.pt.engine, line 93, in __call__
  Module z3c.pt.pagetemplate, line 163, in render
  Module chameleon.zpt.template, line 258, in render
  Module chameleon.template, line 171, in render
  Module fe1669f329d47dbe58685fc16ed7def8.py, line 91, in render
  Module 2328a1216050524624ddd88b5fbc459a.py, line 1800, in render_titlelessform
  Module 2328a1216050524624ddd88b5fbc459a.py, line 451, in render_fields
  Module 2328a1216050524624ddd88b5fbc459a.py, line 126, in render_widget_rendering
  Module 2328a1216050524624ddd88b5fbc459a.py, line 1069, in render_field
  Module five.pt.expressions, line 161, in __call__
  Module Products.Five.browser.metaconfigure, line 479, in __call__
  Module zope.browserpage.viewpagetemplatefile, line 83, in __call__
  Module zope.browserpage.viewpagetemplatefile, line 51, in __call__
  Module zope.pagetemplate.pagetemplate, line 132, in pt_render
  Module five.pt.engine, line 93, in __call__
  Module z3c.pt.pagetemplate, line 163, in render
  Module chameleon.zpt.template, line 258, in render
  Module chameleon.template, line 171, in render
  Module 7088474753afd324b97db37ebed0d91c.py, line 590, in render
  Module 7088474753afd324b97db37ebed0d91c.py, line 465, in render_widget_wrapper
  Module five.pt.expressions, line 161, in __call__
  Module collective.cover.widgets.selectpreview, line 54, in render
  Module zope.browserpage.viewpagetemplatefile, line 83, in __call__
  Module zope.browserpage.viewpagetemplatefile, line 51, in __call__
  Module zope.pagetemplate.pagetemplate, line 132, in pt_render
  Module five.pt.engine, line 93, in __call__
  Module z3c.pt.pagetemplate, line 163, in render
  Module chameleon.zpt.template, line 258, in render
  Module chameleon.template, line 191, in render
  Module chameleon.template, line 171, in render
  Module 4eca5dd0094484a9e1e895e81e1334ac.py, line 123, in render
  Module five.pt.expressions, line 161, in __call__
  Module collective.cover.widgets.selectpreview, line 45, in js
  Module collective.cover.widgets.selectpreview, line 73, in simplify_layout
  Module collective.cover.widgets.selectpreview, line 64, in simplify_layout
KeyError: 'column-size'

 - Expression: "widget/@@ploneform-render-widget"
 - Filename:   ... rm-0.7.7-py2.7.egg/plone/app/z3cform/templates/macros.pt
 - Location:   (line 97: col 81)
 - Source:     ... place="structure widget/@@ploneform-render-widget"/>
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Expression: "view/js"
 - Filename:   ... y2.7.egg/collective/cover/widgets/selectpreview_input.pt
 - Location:   (line 7: col 54)
 - Source:     ... cript" tal:content="structure view/js"></script>
                                                 ^^^^^^^
 - Arguments:  repeat: {...} (0)
               context: <ImplicitAcquisitionWrapper plone at 0xaf944824L>
               views: <ViewMapper - at 0xaf95820cL>
               modules: <TraversableModuleImporter - at 0xb622492cL>
               args: <tuple - at 0xaf57228cL>
               nothing: <NoneType - at 0x81ad6b4>
               target_language: <NoneType - at 0x81ad6b4>
               default: <object - at 0xb7521758L>
               request: <instance - at 0xaf8d8f6cL>
               wrapped_repeat: {...} (0)
               loop: {...} (0)
               template: <ViewPageTemplateFile - at 0xb353bdccL>
               translate: <function translate at 0xaf81472cL>
               options: {...} (0)
               view: <SelectPreviewWidget template_layout at 0xaf9c11ecL>
| FAIL |
Page should have contained text 'Add Cover' but did not
------------------------------------------------------------------------------
Test Mediacarousel Tile                                               | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
Output:  /home/user/sites/portal.buildout/src/brasil.gov.tiles/parts/test/test_mediacarousel_tile/Test_Mediacarousel_Tile/output.xml



Failure in test Test Mediacarousel Tile (test_mediacarousel_tile.robot)
Traceback (most recent call last):
  File "/home/user/cache-python/eggs/unittest2-0.5.1-py2.7.egg/unittest2/case.py", line 340, in run
    testMethod()
  File "/home/user/cache-python/eggs/robotsuite-1.7.0-py2.7.egg/robotsuite/__init__.py", line 461, in runTest
    assert last_status == 'PASS', last_message
AssertionError: Page should have contained text 'Add Cover' but did not

The following test left new threads behind:
Test Mediacarousel Tile (test_mediacarousel_tile.robot)
New thread(s): [<_DummyThread(Dummy-1, started daemon -1338246336)>]
    2/2 (100.0%)
==============================================================================
Test Albuns Tile                                                              
==============================================================================
Test Albuns Tile                                                      
2015-09-21 17:21:18,980 - Zope.SiteErrorLog - ERROR - 1442866878.980.758969495782 http://localhost:55001/plone/++add++collective.cover.content
Traceback (innermost last):
  Module ZPublisher.Publish, line 138, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module plone.z3cform.layout, line 66, in __call__
  Module plone.z3cform.layout, line 60, in update
  Module z3c.form.form, line 266, in render
  Module z3c.form.form, line 161, in render
  Module zope.browserpage.viewpagetemplatefile, line 51, in __call__
  Module zope.pagetemplate.pagetemplate, line 132, in pt_render
  Module five.pt.engine, line 93, in __call__
  Module z3c.pt.pagetemplate, line 163, in render
  Module chameleon.zpt.template, line 258, in render
  Module chameleon.template, line 171, in render
  Module fe1669f329d47dbe58685fc16ed7def8.py, line 91, in render
  Module 2328a1216050524624ddd88b5fbc459a.py, line 1800, in render_titlelessform
  Module 2328a1216050524624ddd88b5fbc459a.py, line 451, in render_fields
  Module 2328a1216050524624ddd88b5fbc459a.py, line 126, in render_widget_rendering
  Module 2328a1216050524624ddd88b5fbc459a.py, line 1069, in render_field
  Module five.pt.expressions, line 161, in __call__
  Module Products.Five.browser.metaconfigure, line 479, in __call__
  Module zope.browserpage.viewpagetemplatefile, line 83, in __call__
  Module zope.browserpage.viewpagetemplatefile, line 51, in __call__
  Module zope.pagetemplate.pagetemplate, line 132, in pt_render
  Module five.pt.engine, line 93, in __call__
  Module z3c.pt.pagetemplate, line 163, in render
  Module chameleon.zpt.template, line 258, in render
  Module chameleon.template, line 171, in render
  Module 7088474753afd324b97db37ebed0d91c.py, line 590, in render
  Module 7088474753afd324b97db37ebed0d91c.py, line 465, in render_widget_wrapper
  Module five.pt.expressions, line 161, in __call__
  Module collective.cover.widgets.selectpreview, line 54, in render
  Module zope.browserpage.viewpagetemplatefile, line 83, in __call__
  Module zope.browserpage.viewpagetemplatefile, line 51, in __call__
  Module zope.pagetemplate.pagetemplate, line 132, in pt_render
  Module five.pt.engine, line 93, in __call__
  Module z3c.pt.pagetemplate, line 163, in render
  Module chameleon.zpt.template, line 258, in render
  Module chameleon.template, line 191, in render
  Module chameleon.template, line 171, in render
  Module 4eca5dd0094484a9e1e895e81e1334ac.py, line 123, in render
  Module five.pt.expressions, line 161, in __call__
  Module collective.cover.widgets.selectpreview, line 45, in js
  Module collective.cover.widgets.selectpreview, line 73, in simplify_layout
  Module collective.cover.widgets.selectpreview, line 64, in simplify_layout
KeyError: 'column-size'

 - Expression: "widget/@@ploneform-render-widget"
 - Filename:   ... rm-0.7.7-py2.7.egg/plone/app/z3cform/templates/macros.pt
 - Location:   (line 97: col 81)
 - Source:     ... place="structure widget/@@ploneform-render-widget"/>
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Expression: "view/js"
 - Filename:   ... y2.7.egg/collective/cover/widgets/selectpreview_input.pt
 - Location:   (line 7: col 54)
 - Source:     ... cript" tal:content="structure view/js"></script>
                                                 ^^^^^^^
 - Arguments:  repeat: {...} (0)
               context: <ImplicitAcquisitionWrapper plone at 0xaf5d7784L>
               views: <ViewMapper - at 0xaf784f2cL>
               modules: <TraversableModuleImporter - at 0xb622492cL>
               args: <tuple - at 0xaf81556cL>
               nothing: <NoneType - at 0x81ad6b4>
               target_language: <NoneType - at 0x81ad6b4>
               default: <object - at 0xb7521758L>
               request: <instance - at 0xaf5f5b6cL>
               wrapped_repeat: {...} (0)
               loop: {...} (0)
               template: <ViewPageTemplateFile - at 0xb353bdccL>
               translate: <function translate at 0xaf5d53acL>
               options: {...} (0)
               view: <SelectPreviewWidget template_layout at 0xaf7e718cL>
| FAIL |
Page should have contained text 'Add Cover' but did not
------------------------------------------------------------------------------
Test Albuns Tile                                                      | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
Output:  /home/user/sites/portal.buildout/src/brasil.gov.tiles/parts/test/test_albuns_tile/Test_Albuns_Tile/output.xml



Failure in test Test Albuns Tile (test_albuns_tile.robot)
Traceback (most recent call last):
  File "/home/user/cache-python/eggs/unittest2-0.5.1-py2.7.egg/unittest2/case.py", line 340, in run
    testMethod()
  File "/home/user/cache-python/eggs/robotsuite-1.7.0-py2.7.egg/robotsuite/__init__.py", line 461, in runTest
    assert last_status == 'PASS', last_message
AssertionError: Page should have contained text 'Add Cover' but did not


  Ran 2 tests with 2 failures and 0 errors in 35.624 seconds.
Tearing down left over layers:
  Tear down brasil.gov.tiles.testing.brasil.gov.tiles:Robot in 0.000 seconds.
  Tear down plone.app.robotframework.remote.AutoLoginRemoteLibrary:RobotRemote in 0.003 seconds.
  Tear down plone.testing.z2.ZServer in 0.866 seconds.
  Tear down brasil.gov.tiles.testing.Fixture in 0.010 seconds.
  Tear down plone.app.testing.layers.PloneFixture in 0.063 seconds.
  Tear down plone.testing.z2.Startup in 0.005 seconds.
  Tear down plone.testing.zca.LayerCleanup in 0.002 seconds.
Total: 76 tests, 2 failures, 1 errors in 1 minutes 1.325 seconds.

@winstonf88 FYI: isso não parece um erro do teste, mas um bug do tile

O erro ocorreu nos testes do tile de destaque porquê:

def populate_with_object(self, obj):
    super(DestaqueTile, self).populate_with_object(obj)

ocorria o erro descrito nesse relato.

A solução é remover esse código redundante conflituoso e aplicar o upgradeStep que migra essa estrutura de dados, já utilizada no collective.cover mais novo.

Todos os métodos que eram similares à última versão do tipo Lista (1.0a12), ou que trariam conflito (como o results que teve de ser removido já que a estrutura foi alterada) foram removidos. A única exceção foi o get_configured_fields, que era diferente mas tinha apenas um if (if 'format') a mais na versão do collective.cover então escolhemos por sua remoção por não causar impacto.

Pra quem não tem familiaridade com ambos os pacotes (collective.cover e brasil.gov.tiles), chegar a essa conclusão não foi exatamente trivial. Fica a pergunta:

  • Por que o tipo Destaque, quando herdou do tipo Lista, copiou todos os métodos sendo que isso não era necessário?
  • Se o objetivo era apenas adicionar o "limite" de 2 no tipo destaque, porque a customização foi feita, já que o limite do tipo lista era 5 e, portanto, atendia ao fato de ter 2 itens? Foi mais por causa da template?
  • Qual a justificativa de se existir o overrides.zcml nesse pacote? Analisando o histórico do arquivo, não consegui ver a motivação do mesmo e como já gastamos muito tempo nesse relato infelizmente não teremos como ficar comparando o código fonte para chegar a uma conclusão (ver também #134).

Devemos nos policiar nos commits para sempre informarmos o porquê de algo ser feito além do que está sendo feito. Falamos isso porque pode ser que nas versões mais novas do collective.cover por exemplo pode ser que o tile "Destaque" não seja mais necessário, já que agora o número de itens é parametrizado.

@hvelarde @rodfersou opiniões?

@idgserpro desconheço os detalhes da implementação; como falei anteriormente a gente não está mais envolvida diretamente com o IDGB.

os pacotes nos namespaces collective e sc tem uma vida e evolução própria por fora do IDGB; isso é muito bom porque o projeto está se beneficiando com as melhorias que estão acontecendo continuamente.

eu sugiro vocês acompanhar de perto essas mudanças nos pacotes da comunidade para não ter mais surpresas desagradáveis no futuro.

eu sugiro vocês acompanhar de perto essas mudanças nos pacotes da comunidade para não ter mais surpresas desagradáveis no futuro

Sim e isso está sendo feito, mas muitas questões só tem como ser "estudadas" quando vêm a demanda, como foi o caso da análise em #132 (comment) e, nesse caso , tentamos correr atrás de quem implementou por uma questão de familiaridade (mesmo que atualmente não esteja envolvida diretamente), às vezes horas de estudo e análise conseguem ser explicadas em minutos por quem implementou pois é possível indicar (principalmente) a motivação por trás de uma implementação.

nós estamos na mesma situação de vocês: eu respondo sempre as perguntas simplesmente porque gostamos do projeto IDGB e nos sentimos parte da comunidade desde o começo, mas não vou dedicar horas a resolver problemas sem ser pago por isso.

Resolvido em #137