|
102 | 102 | <section id="blog-list"> |
103 | 103 | <h1>Blog</h1> |
104 | 104 |
|
| 105 | + <article class="blog-list"> |
| 106 | + <div class="header"> |
| 107 | + <a href="/blog/kiwi-tcms-team/2018/02/10/kiwi-tcms-tcms-api-version-400/" rel="bookmark" title="Permalink to Kiwi TCMS & tcms-api version 4.0.0"> |
| 108 | + <h1 class="top-header">Kiwi TCMS & tcms-api version 4.0.0</h1> |
| 109 | + </a> |
| 110 | + |
| 111 | + <p class="post-meta">Posted by |
| 112 | + <a href="/blog/kiwi-tcms-team/">Kiwi TCMS Team</a> |
| 113 | + on Sat 10 February 2018 |
| 114 | + </p> |
| 115 | + </div> |
| 116 | + |
| 117 | + <div class="content"> |
| 118 | + <p>We're happy to announce Kiwi TCMS version 4.0.0 |
| 119 | +and the corresponding tcms-api version 4.0.0! This is a very big release |
| 120 | +which introduces tons of backwards incompatible changes to the RPC layer |
| 121 | +as well as several bug-fixes and enhancements!</p> |
| 122 | +<p>With this release Kiwi TCMS meets one of our |
| 123 | +<a href="/blog/kiwi-tcms-team/2018/01/22/kiwi-tcms-roadmap-for-2018/">milestones for 2018</a>! All XML-RPC |
| 124 | +namespaces now match DB model names and the API client class names. Lots of |
| 125 | +similar and duplicate methods were removed and existing ones were simplified. |
| 126 | +We've also reduced code duplication and technical debth by 1 month |
| 127 | +according to stats by <a href="https://codeclimate.com/github/kiwitcms/Kiwi">CodeClimate</a>.</p> |
| 128 | +<p><strong>IMPORTANT:</strong> this is also the first release to officially publish the |
| 129 | +<code>pub.kiwitcms.eu/kiwitcms/kiwi</code> container image!</p> |
| 130 | +<p><strong>WARNING:</strong> upgrading to Kiwi TCMS 4.0.0 means you will have to upgrade |
| 131 | +the tcms-api client as well. None of the 4.x releases is compatible with |
| 132 | +older releases due to the massive ammount of changes in the RPC layer.</p> |
| 133 | +<h2>Changes since Kiwi TCMS 3.50</h2> |
| 134 | +<h3>Enhancements and bug fixes</h3> |
| 135 | +<ul> |
| 136 | +<li>Upgrade to Django 2.0.2 which patches a security issue</li> |
| 137 | +<li>Pin JIRA client version to 1.0.10. Fixes |
| 138 | + <a href="https://github.com/kiwitcms/Kiwi/issues/195">Issue #195</a></li> |
| 139 | +<li>Generate api-docs for model classes</li> |
| 140 | +<li>Updated documentation for all RPC methods</li> |
| 141 | +<li>Use Grappelli jQuery initialization, fixes popup windows</li> |
| 142 | +<li>Unify RPC namespaces, API client class names and server-side model names. |
| 143 | + Fixes <a href="https://github.com/kiwitcms/Kiwi/issues/153">Issue #153</a></li> |
| 144 | +</ul> |
| 145 | +<h3>Settings</h3> |
| 146 | +<ul> |
| 147 | +<li>Remove <code>ADMIN_PREFIX</code> setting</li> |
| 148 | +</ul> |
| 149 | +<h3>RPC methods refactoring</h3> |
| 150 | +<ul> |
| 151 | +<li>Remove <code>Build.check_build</code>, use <code>Build.filter</code></li> |
| 152 | +<li>Remove <code>Build.get</code>, use <code>Build.filter</code></li> |
| 153 | +<li>Remove <code>Build.get_caseruns</code>, use <code>TestCaseRun.filter</code></li> |
| 154 | +<li> |
| 155 | +<p>Remove <code>Build.get_runs</code>, use <code>TestRun.filter</code></p> |
| 156 | +</li> |
| 157 | +<li> |
| 158 | +<p>Rename <code>Env.filter_groups</code>, use <code>Env.Group.filter</code></p> |
| 159 | +</li> |
| 160 | +<li>Rename <code>Env.filter_properties</code>, use <code>Env.Property.filter</code></li> |
| 161 | +<li> |
| 162 | +<p>Rename <code>Env.filter_values</code>, use <code>Env.Value.filter</code></p> |
| 163 | +</li> |
| 164 | +<li> |
| 165 | +<p>Remove <code>Product.add_component</code>, use <code>Component.create</code></p> |
| 166 | +</li> |
| 167 | +<li>Remove <code>Product.add_version</code>, use <code>Version.create</code></li> |
| 168 | +<li>Remove <code>Product.check_category</code>, use <code>Category.filter</code></li> |
| 169 | +<li>Remove <code>Product.check_component</code>, use <code>Component.filter</code></li> |
| 170 | +<li>Remove <code>Product.check_product</code>, use <code>Product.filter</code></li> |
| 171 | +<li>Remove <code>Product.filter_categories</code>, use <code>Category.filter</code></li> |
| 172 | +<li>Remove <code>Product.filter_components</code>, use <code>Component.filter</code></li> |
| 173 | +<li>Remove <code>Product.filter_versions</code>, use <code>Version.filter</code></li> |
| 174 | +<li>Remove <code>Product.get</code>, use <code>Product.filter</code></li> |
| 175 | +<li>Remove <code>Product.get_builds</code>, use <code>Build.filter</code></li> |
| 176 | +<li>Remove <code>Product.get_cases</code>, use <code>TestCase.filter</code></li> |
| 177 | +<li>Remove <code>Product.get_categories</code>, use <code>Category.filter</code></li> |
| 178 | +<li>Remove <code>Product.get_category</code>, use <code>Category.filter</code></li> |
| 179 | +<li>Remove <code>Product.get_component</code>, use <code>Component.filter</code></li> |
| 180 | +<li> |
| 181 | +<p>Remove <code>Product.update_component</code>, use <code>Component.update</code></p> |
| 182 | +</li> |
| 183 | +<li> |
| 184 | +<p>Rename <code>Tag.get_tags</code> to <code>Tag.filter</code></p> |
| 185 | +</li> |
| 186 | +<li> |
| 187 | +<p>Remove <code>TestCase.add_comment</code></p> |
| 188 | +</li> |
| 189 | +<li>Update signature for <code>TestCase.add_component</code></li> |
| 190 | +<li>Update signature for <code>TestCase.add_tag</code></li> |
| 191 | +<li>Remove <code>TestCase.add_to_run</code>, use <code>TestRun.add_case</code></li> |
| 192 | +<li>Remove <code>TestCase.attach_bug</code>, use <code>Bug.create</code></li> |
| 193 | +<li>Remove <code>TestCase.calculate_average_estimated_time</code></li> |
| 194 | +<li>Remove <code>TestCase.calculate_total_estimated_time</code></li> |
| 195 | +<li>Remove <code>TestCase.check_case_status</code>, use <code>TestCaseStatus.filter</code></li> |
| 196 | +<li>Remove <code>TestCase.check_priority</code>, use <code>Priority.filter</code></li> |
| 197 | +<li>Update signature for <code>TestCase.create</code>, no longer accepts <code>plan</code>, |
| 198 | + <code>component</code> and <code>bug</code> dict attributes. Instead use |
| 199 | + <code>TestPlan.add_case</code>, <code>TestCase.add_component</code> and <code>Bug.create</code></li> |
| 200 | +<li>Remove <code>TestCase.detach_bug</code>, use <code>Bug.remove</code></li> |
| 201 | +<li>Remove <code>TestCase.filter_count</code></li> |
| 202 | +<li>Remove <code>TestCase.get</code>, use <code>TestCase.filter</code></li> |
| 203 | +<li>Remove <code>TestCase.get_bugs</code>, use <code>Bug.filter({'case': ?})</code></li> |
| 204 | +<li>Remove <code>TestCase.get_bug_systems</code></li> |
| 205 | +<li>Remove <code>TestCase.get_case_status</code>, use <code>TestCaseStatus.filter</code></li> |
| 206 | +<li>Update signature for <code>TestCase.get_components</code></li> |
| 207 | +<li>Remove <code>TestCase.get_plans</code>, use <code>TestPlan.filter({'case': ?})</code></li> |
| 208 | +<li>Remove <code>TestCase.get_priority</code>, use <code>Priority.filter</code></li> |
| 209 | +<li>Remove <code>TestCase.get_tags</code>, use <code>Tag.filter({'case': ?})</code></li> |
| 210 | +<li>Remove <code>TestCase.get_text</code>, use <code>TestCase.filter</code></li> |
| 211 | +<li>Remove <code>TestCase.link_plan</code>, use <code>TestPlan.add_case</code></li> |
| 212 | +<li>Rename <code>TestCase.notification_add_cc</code> to <code>TestCase.add_notification_cc</code> |
| 213 | + and update signature</li> |
| 214 | +<li>Rename <code>TestCase.notification_get_cc_list</code> to <code>TestCase.get_notification_cc</code> |
| 215 | + and update signature</li> |
| 216 | +<li>Rename <code>TestCase.notification_remove_cc</code> to <code>TestCase.remove_notification_cc</code> |
| 217 | + and update signature</li> |
| 218 | +<li>Update signature for <code>TestCase.remove_component</code></li> |
| 219 | +<li>Update signature for <code>TestCase.remove_tag</code></li> |
| 220 | +<li>Remove <code>TestCase.store_text</code>, use <code>TestCase.update</code> with |
| 221 | + <code>setup</code>, <code>breakdown</code>, <code>action</code> and <code>effect</code> attributes in the parameter dict</li> |
| 222 | +<li> |
| 223 | +<p>Remove <code>TestCase.unlink_plan</code>, use <code>TestPlan.remove_case</code></p> |
| 224 | +</li> |
| 225 | +<li> |
| 226 | +<p>Remove <code>TestCasePlan.get</code></p> |
| 227 | +</li> |
| 228 | +<li> |
| 229 | +<p>Remove <code>TestCasePlan.update</code></p> |
| 230 | +</li> |
| 231 | +<li> |
| 232 | +<p>Update <code>TestCaseRun.add_comment</code> to accept a single ID as first parameter</p> |
| 233 | +</li> |
| 234 | +<li>Remove <code>TestCaseRun.attach_bug</code>, use <code>Bug.create</code></li> |
| 235 | +<li>Rename <code>TestCaseRun.attach_log</code> to <code>TestCaseRun.add_log</code></li> |
| 236 | +<li>Remove <code>TestCaseRun.detach_bug</code>, use <code>Bug.remove</code></li> |
| 237 | +<li>Rename <code>TestCaseRun.detach_log</code> to <code>TestCaseRun.remove_log</code></li> |
| 238 | +<li>Remove <code>TestCaseRun.get</code>, use <code>TestCaseRun.filter</code></li> |
| 239 | +<li>Remove <code>TestCaseRun.get_bugs</code>, use <code>Bug.filter({'case_run': ?})</code></li> |
| 240 | +<li>Remove <code>TestCaseRun.get_case_run_status_by_name</code></li> |
| 241 | +<li> |
| 242 | +<p>Update signature for <code>TestCaseRun.update</code></p> |
| 243 | +</li> |
| 244 | +<li> |
| 245 | +<p>Remove <code>TestPlan.add_component</code></p> |
| 246 | +</li> |
| 247 | +<li>Update signature for <code>TestPlan.add_tag</code></li> |
| 248 | +<li>Remove <code>TestPlan.check_plan_type</code>, use <code>PlanType.filter</code></li> |
| 249 | +<li>Remove <code>TestPlan.filter_count</code></li> |
| 250 | +<li>Remove <code>TestPlan.get</code>, use <code>TestPlan.filter</code></li> |
| 251 | +<li>Remove <code>TestPlan.get_all_cases_tags</code></li> |
| 252 | +<li>Remove <code>TestPlan.get_components</code></li> |
| 253 | +<li>Remove <code>TestPlan.get_env_groups</code>, use <code>Env.Group.filter({'testplan': ?})</code></li> |
| 254 | +<li>Remove <code>TestPlan.get_plan_type</code>, use <code>PlanType.filter</code></li> |
| 255 | +<li>Remove <code>TestPlan.get_product</code>, use <code>Product.filter({'plan': ?})</code></li> |
| 256 | +<li>Remove <code>TestPlan.get_tags</code>, use <code>Tag.filter({'plan': ?})</code></li> |
| 257 | +<li>Remove <code>TestPlan.get_test_cases</code>, use <code>TestCase.filter({'plan': ?})</code></li> |
| 258 | +<li>Remove <code>TestPlan.get_test_runs</code>, use <code>TestRun.filter({'plan': ?})</code></li> |
| 259 | +<li>Remove <code>TestPlan.get_text</code>, use <code>TestPlan.filter</code></li> |
| 260 | +<li>Rename <code>TestPlan.link_env_value</code> to <code>TestPlan.add_env_value</code> |
| 261 | + and update signature</li> |
| 262 | +<li>Remove <code>TestPlan.remove_component</code></li> |
| 263 | +<li>Update signature for <code>TestPlan.remove_tag</code></li> |
| 264 | +<li>Remove <code>TestPlan.store_text</code>, use <code>TestPlan.update</code> with |
| 265 | + a <code>text</code> attribute in the parameter values</li> |
| 266 | +<li> |
| 267 | +<p>Rename <code>TestPlan.unlink_env_value</code> to <code>TestPlan.remove_env_value</code> |
| 268 | + and update signature</p> |
| 269 | +</li> |
| 270 | +<li> |
| 271 | +<p>Rename <code>TestRun.add_cases</code> to <code>TestRun.add_case</code> and update signature</p> |
| 272 | +</li> |
| 273 | +<li>Update signature for <code>TestRun.add_tag</code></li> |
| 274 | +<li>Update signature for <code>TestRun.create</code>, no longer accepts <code>case</code> |
| 275 | + dict attribute. Instead use <code>TestRun.add_case</code></li> |
| 276 | +<li>Remove <code>TestRun.filter_count</code></li> |
| 277 | +<li>Remove <code>TestRun.get</code>, use <code>TestRun.filter</code></li> |
| 278 | +<li>Remove <code>TestRun.get_bugs</code></li> |
| 279 | +<li>Remove <code>TestRun.get_env_values</code>, use <code>Env.Value.filter({'testrun': ?})</code></li> |
| 280 | +<li>Remove <code>TestRun.get_tags</code>, use <code>Tag.filter({'run': ?})</code></li> |
| 281 | +<li>Rename <code>TestRun.get_test_cases</code> to <code>TestRun.get_cases</code></li> |
| 282 | +<li>Remove <code>TestRun.get_test_case_runs</code>, use <code>TestCaseRun.filter({'run': ?})</code></li> |
| 283 | +<li>Remove <code>TestRun.get_test_plan</code>, use <code>TestPlan.filter({'run': ?})[0]</code></li> |
| 284 | +<li>Rename <code>TestRun.remove_cases</code> to <code>TestRun.remove_case</code> and update signature</li> |
| 285 | +<li>Update signature for <code>TestRun.remove_tag</code></li> |
| 286 | +<li> |
| 287 | +<p>Update signature for <code>TestRun.update</code></p> |
| 288 | +</li> |
| 289 | +<li> |
| 290 | +<p>Rename <code>User.get</code> to <code>User.filter</code></p> |
| 291 | +</li> |
| 292 | +<li>Rename <code>User.join</code> to <code>User.join_group</code></li> |
| 293 | +<li>Update signature for <code>User.update</code></li> |
| 294 | +</ul> |
| 295 | +<h3>Models and database migrations</h3> |
| 296 | +<ul> |
| 297 | +<li>Remove model <code>TestEnvironment</code></li> |
| 298 | +<li>Remove model <code>TestEnvironmentCategory</code></li> |
| 299 | +<li>Remove model <code>TestEnvironmentElement</code></li> |
| 300 | +<li>Remove model <code>TestEnvironmentMap</code></li> |
| 301 | +<li>Remove model <code>TestEnvironmentProperty</code></li> |
| 302 | +<li>Remove model <code>TestPlanComponent</code></li> |
| 303 | +<li>Remove <code>TestPlan.get_text_with_version()</code></li> |
| 304 | +<li>Remove <code>TestRun.get_previous_or_next()</code></li> |
| 305 | +</ul> |
| 306 | +<p><strong>IMPORTANT:</strong> this release introduces new database migrations!</p> |
| 307 | +<h2>tcms-api changes since 1.5.1</h2> |
| 308 | +<ul> |
| 309 | +<li><strong>Make the code compatible with Kiwi TCMS XML-RPC v4.0.0</strong></li> |
| 310 | +<li>Rename <code>Status</code> to <code>TestCaseRunStatus</code></li> |
| 311 | +<li>Rename <code>CaseRun</code> to <code>TestCaseRun</code></li> |
| 312 | +<li>Remove <code>PlanStatus</code>, use <code>TestPlan.is_active</code></li> |
| 313 | +<li>Remove <code>RunStatus</code>, use <code>TestRun.finished</code></li> |
| 314 | +<li>Remove <code>TestPlan.components</code> container</li> |
| 315 | +<li>Update signature for <code>TestPlan</code>. Now accept <code>text</code> kwarg in constructor |
| 316 | + instead of <code>document</code>.</li> |
| 317 | +</ul> |
| 318 | +<h2>How to upgrade</h2> |
| 319 | +<p>If you are using Kiwi TCMS as a Docker container then</p> |
| 320 | +<div class="highlight"><pre><span></span><code>cd Kiwi/ |
| 321 | +docker-compose down |
| 322 | +docker pull pub.kiwitcms.eu/kiwitcms/kiwi |
| 323 | +docker-compose up -d |
| 324 | +docker exec -it kiwi_web /Kiwi/manage.py migrate |
| 325 | +</code></pre></div> |
| 326 | + |
| 327 | +<p>Happy testing!</p> |
| 328 | + </div> |
| 329 | + </article> |
105 | 330 | <article class="blog-list"> |
106 | 331 | <div class="header"> |
107 | 332 | <a href="/blog/kiwi-tcms-team/2018/01/25/kiwi-tcms-version-350/" rel="bookmark" title="Permalink to Kiwi TCMS version 3.50"> |
|
0 commit comments