)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"32138a1b7e2b2eb4869ae77806c35184b6f166f2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yair Fried \u003cyfried@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-07-08 16:58:55 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Restructure Scenarios"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Iaee7edb7c1fb7fd6f65396a388623b48daa017db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"baada198_94f28e98","line":7,"updated":"2014-07-10 21:58:41.000000000","message":"The bp isn\u0027t mentioned in here","commit_id":"1dd9d93e22b25efe94925cd69121556187ebb256"}],"specs/restructure-scenarios.rst":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"718014454f196bf45e18b7ab83cfbbe8206ed2b7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":"   "},{"line_number":49,"context_line":"   * It\u0027s already over-crowded"},{"line_number":50,"context_line":"   * You might need methods such as setUp and setUp class that don\u0027t belong"},{"line_number":51,"context_line":"      in manager"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_c4f13498","line":48,"updated":"2014-06-23 07:51:35.000000000","message":"nit: unnecessary spaces in line 48.","commit_id":"768227416b0d8844a2d17713ff307e156f0bc985"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"718014454f196bf45e18b7ab83cfbbe8206ed2b7","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Strictly define 2 module types:"},{"line_number":71,"context_line":" #. Utility Classes - containing shared code with an inheritance tree."},{"line_number":72,"context_line":"    Shouldn\u0027t have and test_methods"},{"line_number":73,"context_line":" #. test_cases - Class that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contains ONLY test_method"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_240f388d","line":72,"updated":"2014-06-23 07:51:35.000000000","message":"s/and/any/ ?","commit_id":"768227416b0d8844a2d17713ff307e156f0bc985"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"718014454f196bf45e18b7ab83cfbbe8206ed2b7","unresolved":false,"context_lines":[{"line_number":71,"context_line":" #. Utility Classes - containing shared code with an inheritance tree."},{"line_number":72,"context_line":"    Shouldn\u0027t have and test_methods"},{"line_number":73,"context_line":" #. test_cases - Class that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contains ONLY test_method"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp?"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_6fa8398d","line":74,"updated":"2014-06-23 07:51:35.000000000","message":"Does this mean all non-test methods will be moved to utility classes?\nMy concern is that some tests specific method also should be moved to common part and that would make less-readability due to the method scope.","commit_id":"768227416b0d8844a2d17713ff307e156f0bc985"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"718014454f196bf45e18b7ab83cfbbe8206ed2b7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"----------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Target Milestone for completion:"},{"line_number":121,"context_line":"  Juno-1"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Work Items"},{"line_number":124,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_c4c3f437","line":121,"updated":"2014-06-23 07:51:35.000000000","message":"We are after Juno-1 already.","commit_id":"768227416b0d8844a2d17713ff307e156f0bc985"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a70a23c1b91b99a34f5798969f1a5189f210d7fd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"it, so when you see self.(_)create_server() in scenario it is sure to"},{"line_number":43,"context_line":"contain some already written code, including cleanup methods."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_cc26f6cd","line":45,"updated":"2014-07-05 07:23:41.000000000","message":"Do you mean we have all below in our code base atm? \nIt doesn\u0027t seem to be the case to me, can you provide examples?\n\nThings that are not in the code base atm should be in the alternative solutions section, including the comments about why they are not a valid alternative.","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"827005965ab9bf07b5eb57f137501f89bb696c07","unresolved":false,"context_lines":[{"line_number":42,"context_line":"it, so when you see self.(_)create_server() in scenario it is sure to"},{"line_number":43,"context_line":"contain some already written code, including cleanup methods."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_217814f8","line":45,"in_reply_to":"baada198_48947d8a","updated":"2014-07-08 14:11:04.000000000","message":"Done","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"570a3b22ac2d963ffeea27156627e417ef1e2534","unresolved":false,"context_lines":[{"line_number":42,"context_line":"it, so when you see self.(_)create_server() in scenario it is sure to"},{"line_number":43,"context_line":"contain some already written code, including cleanup methods."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_48947d8a","line":45,"in_reply_to":"baada198_79520368","updated":"2014-07-07 09:36:51.000000000","message":"The options below would be the problem if they are something we are doing now, which I don\u0027t think it\u0027s the case.","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":42,"context_line":"it, so when you see self.(_)create_server() in scenario it is sure to"},{"line_number":43,"context_line":"contain some already written code, including cleanup methods."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_79520368","line":45,"in_reply_to":"baada198_cc26f6cd","updated":"2014-07-06 11:56:04.000000000","message":"I think this is more a description of the problem, than alternatives","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"af5093882756accebe83dcb69e57463f190b6762","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"   * It\u0027s already over-crowded"},{"line_number":50,"context_line":"   * You might need methods such as setUp and setUp class that don\u0027t belong"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_b6f40488","line":47,"updated":"2014-07-02 18:31:14.000000000","message":"why not just using mixins?","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Current way to share code between scenarios:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"#. Dumping the shared code to scenario/manager.py. Bad because:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"   * It\u0027s already over-crowded"},{"line_number":50,"context_line":"   * You might need methods such as setUp and setUp class that don\u0027t belong"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_395deb79","line":47,"in_reply_to":"baada198_b6f40488","updated":"2014-07-06 11:56:04.000000000","message":"Why not indeed? but if you want to use mixins and introduce multiple/complicated inheritance to tree, you need a better organized tree.","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a70a23c1b91b99a34f5798969f1a5189f210d7fd","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      in manager"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"#. Inheritance - when super class has test_methods, those methods will be"},{"line_number":54,"context_line":"   executed twice: in super and in subclass"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"#. Simply adding new test_methods to existing class - The new tests_methods"},{"line_number":57,"context_line":"   could be completely off-topic for the old module."}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_8c395ef4","line":54,"updated":"2014-07-05 07:23:41.000000000","message":"I guess you mean \"when subclass has test methods\"?\nDo we have this case now in the tree? As far as I know we have base classes without tests and tests that inherit from base classes only.\nCan you make an example?","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"827005965ab9bf07b5eb57f137501f89bb696c07","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      in manager"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"#. Inheritance - when super class has test_methods, those methods will be"},{"line_number":54,"context_line":"   executed twice: in super and in subclass"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"#. Simply adding new test_methods to existing class - The new tests_methods"},{"line_number":57,"context_line":"   could be completely off-topic for the old module."}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_61820cca","line":54,"in_reply_to":"baada198_08a8c5d9","updated":"2014-07-08 14:11:04.000000000","message":"Done","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      in manager"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"#. Inheritance - when super class has test_methods, those methods will be"},{"line_number":54,"context_line":"   executed twice: in super and in subclass"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"#. Simply adding new test_methods to existing class - The new tests_methods"},{"line_number":57,"context_line":"   could be completely off-topic for the old module."}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_9976f704","line":54,"in_reply_to":"baada198_8c395ef4","updated":"2014-07-06 11:56:04.000000000","message":"I mean super-class - when ancestor has test methods, all subclasses will be executing those test methods as well.\nOnly \"base\" we have is manager.py. All other modules include test_methods as well as utility methods, so further inheritance is impossible without suggested re-factoring, or it will result in duplication of test methods from ancestor to subclass","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"570a3b22ac2d963ffeea27156627e417ef1e2534","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      in manager"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"#. Inheritance - when super class has test_methods, those methods will be"},{"line_number":54,"context_line":"   executed twice: in super and in subclass"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"#. Simply adding new test_methods to existing class - The new tests_methods"},{"line_number":57,"context_line":"   could be completely off-topic for the old module."}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_08a8c5d9","line":54,"in_reply_to":"baada198_9976f704","updated":"2014-07-07 09:36:51.000000000","message":"Right, sorry I got confused here.","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a70a23c1b91b99a34f5798969f1a5189f210d7fd","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Strictly define 2 module types:"},{"line_number":71,"context_line":" #. Utility Classes - containing shared code with an inheritance tree."},{"line_number":72,"context_line":"    Shouldn\u0027t have any test_methods"},{"line_number":73,"context_line":" #. test_cases - Classes that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contain ONLY test_methods"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_8c107e5a","line":72,"updated":"2014-07-05 07:23:41.000000000","message":"Those are the current base classes?","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Strictly define 2 module types:"},{"line_number":71,"context_line":" #. Utility Classes - containing shared code with an inheritance tree."},{"line_number":72,"context_line":"    Shouldn\u0027t have any test_methods"},{"line_number":73,"context_line":" #. test_cases - Classes that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contain ONLY test_methods"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_39a88bda","line":72,"in_reply_to":"baada198_8c107e5a","updated":"2014-07-06 11:56:04.000000000","message":"yes","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a70a23c1b91b99a34f5798969f1a5189f210d7fd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Strictly define 2 module types:"},{"line_number":71,"context_line":" #. Utility Classes - containing shared code with an inheritance tree."},{"line_number":72,"context_line":"    Shouldn\u0027t have any test_methods"},{"line_number":73,"context_line":" #. test_cases - Classes that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contain ONLY test_methods"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_0c046e16","line":74,"range":{"start_line":73,"start_character":5,"end_line":74,"end_character":28},"updated":"2014-07-05 07:23:41.000000000","message":"So the change here would be not to implement any code which can be potentially shared in the test class, and put it instead in a util class?","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Strictly define 2 module types:"},{"line_number":71,"context_line":" #. Utility Classes - containing shared code with an inheritance tree."},{"line_number":72,"context_line":"    Shouldn\u0027t have any test_methods"},{"line_number":73,"context_line":" #. test_cases - Classes that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contain ONLY test_methods"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_59ea9fdb","line":74,"range":{"start_line":73,"start_character":5,"end_line":74,"end_character":28},"in_reply_to":"baada198_0c046e16","updated":"2014-07-06 11:56:04.000000000","message":"yes","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a70a23c1b91b99a34f5798969f1a5189f210d7fd","unresolved":false,"context_lines":[{"line_number":73,"context_line":" #. test_cases - Classes that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contain ONLY test_methods"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"},{"line_number":78,"context_line":"    * utilities.py - not necessarily a part of the class,"},{"line_number":79,"context_line":"      so components can be imported \"sideways\" (without inheritance)"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_a70c7b3c","line":76,"updated":"2014-07-05 07:23:41.000000000","message":"Each scenario is a dedicated python file.\nNow in your proposal a package contains multiple python files.\nWhat is the proposed grouping criteria for scenarios?","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":73,"context_line":" #. test_cases - Classes that that implements/inherits from a specific SUPER"},{"line_number":74,"context_line":"    and contain ONLY test_methods"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"},{"line_number":78,"context_line":"    * utilities.py - not necessarily a part of the class,"},{"line_number":79,"context_line":"      so components can be imported \"sideways\" (without inheritance)"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_19dd8742","line":76,"in_reply_to":"baada198_a70c7b3c","updated":"2014-07-06 11:56:04.000000000","message":"initially - each existing scenario will be converted to a package.\nthe following stage would be to merge packages based on shared code, duplication, and/or common subjects","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a70a23c1b91b99a34f5798969f1a5189f210d7fd","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"},{"line_number":78,"context_line":"    * utilities.py - not necessarily a part of the class,"},{"line_number":79,"context_line":"      so components can be imported \"sideways\" (without inheritance)"},{"line_number":80,"context_line":"    * test_cases1.py - only test cases"},{"line_number":81,"context_line":"    * test_cases2.py"},{"line_number":82,"context_line":"    * more"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_071b6773","line":79,"updated":"2014-07-05 07:23:41.000000000","message":"So if we have utils that can be shared across various scenario tests, we could have a utils class, or even a common package under scenario with multiple util classes.\nThis approach seems to promote an approach where a util method belongs to package only because it was initially implemented there, and a new scenario will have to \"cherry-pick\" utils from the different scenario packages.","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9cffef7afb137c8640fa425033ade28ea5f48d99","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"},{"line_number":78,"context_line":"    * utilities.py - not necessarily a part of the class,"},{"line_number":79,"context_line":"      so components can be imported \"sideways\" (without inheritance)"},{"line_number":80,"context_line":"    * test_cases1.py - only test cases"},{"line_number":81,"context_line":"    * test_cases2.py"},{"line_number":82,"context_line":"    * more"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_d92eaffa","line":79,"in_reply_to":"baada198_071b6773","updated":"2014-07-06 11:56:04.000000000","message":"this is just a suggestion. We could stick with class-only modules, and/or make sure commonly used methods are moved up the class tree appropriately","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"570a3b22ac2d963ffeea27156627e417ef1e2534","unresolved":false,"context_lines":[{"line_number":76,"context_line":"The scenario tree would then be structured so each scenario will consist of a new package:"},{"line_number":77,"context_line":"    * __init__.py - containing setUp/tearDown?"},{"line_number":78,"context_line":"    * utilities.py - not necessarily a part of the class,"},{"line_number":79,"context_line":"      so components can be imported \"sideways\" (without inheritance)"},{"line_number":80,"context_line":"    * test_cases1.py - only test cases"},{"line_number":81,"context_line":"    * test_cases2.py"},{"line_number":82,"context_line":"    * more"}],"source_content_type":"text/x-rst","patch_set":16,"id":"baada198_684dc1c3","line":79,"in_reply_to":"baada198_d92eaffa","updated":"2014-07-07 09:36:51.000000000","message":"Scenario tests involve multiple services, but they tend to be biased towards testing a specific one. \n\nThe existing base classes are specialized in a service specific way to include the setup and utils which are used by the tests from subclasses.  So if an util is missing in the that a test wants to use, a new one is created or copied and enhanced, as you described.\n\nSo I think forcing scenario tests into a category by inheriting a specialized base class is not the best option, I would prefer to see a completely flat test structure (1 base class, all test classes inheriting from it), and utils to be imported (or mixins) in a dedicated classes, possibly specialized by service.\n\nIn case of mixins, we would probably need a single class, to make sure we avoid name conflicts, i.e. two util classes implementing a method with the same name.","commit_id":"3eae2d58bafecee2d3895802f021b41ea9a05867"}]}
