We're happy to announce Kiwi TCMS version 4.0.0 and the corresponding tcms-api version 4.0.0! This is a very big release which introduces tons of backwards incompatible changes to the RPC layer as well as several bug-fixes and enhancements!
With this release Kiwi TCMS meets one of our milestones for 2018! All XML-RPC namespaces now match DB model names and the API client class names. Lots of similar and duplicate methods were removed and existing ones were simplified. We've also reduced code duplication and technical debth by 1 month according to stats by CodeClimate.
IMPORTANT: this is also the first release to officially publish the
kiwitcms/kiwi
image on Docker Hub!
WARNING: upgrading to Kiwi TCMS 4.0.0 means you will have to upgrade the tcms-api client as well. None of the 4.x releases is compatible with older releases due to the massive ammount of changes in the RPC layer.
Changes since Kiwi TCMS 3.50
Enhancements and bug fixes
- Upgrade to Django 2.0.2 which patches a security issue
- Pin JIRA client version to 1.0.10. Fixes Issue #195
- Generate api-docs for model classes
- Updated documentation for all RPC methods
- Use Grappelli jQuery initialization, fixes popup windows
- Unify RPC namespaces, API client class names and server-side model names. Fixes Issue #153
Settings
- Remove
ADMIN_PREFIX
setting
RPC methods refactoring
- Remove
Build.check_build
, useBuild.filter
- Remove
Build.get
, useBuild.filter
- Remove
Build.get_caseruns
, useTestCaseRun.filter
-
Remove
Build.get_runs
, useTestRun.filter
-
Rename
Env.filter_groups
, useEnv.Group.filter
- Rename
Env.filter_properties
, useEnv.Property.filter
-
Rename
Env.filter_values
, useEnv.Value.filter
-
Remove
Product.add_component
, useComponent.create
- Remove
Product.add_version
, useVersion.create
- Remove
Product.check_category
, useCategory.filter
- Remove
Product.check_component
, useComponent.filter
- Remove
Product.check_product
, useProduct.filter
- Remove
Product.filter_categories
, useCategory.filter
- Remove
Product.filter_components
, useComponent.filter
- Remove
Product.filter_versions
, useVersion.filter
- Remove
Product.get
, useProduct.filter
- Remove
Product.get_builds
, useBuild.filter
- Remove
Product.get_cases
, useTestCase.filter
- Remove
Product.get_categories
, useCategory.filter
- Remove
Product.get_category
, useCategory.filter
- Remove
Product.get_component
, useComponent.filter
-
Remove
Product.update_component
, useComponent.update
-
Rename
Tag.get_tags
toTag.filter
-
Remove
TestCase.add_comment
- Update signature for
TestCase.add_component
- Update signature for
TestCase.add_tag
- Remove
TestCase.add_to_run
, useTestRun.add_case
- Remove
TestCase.attach_bug
, useBug.create
- Remove
TestCase.calculate_average_estimated_time
- Remove
TestCase.calculate_total_estimated_time
- Remove
TestCase.check_case_status
, useTestCaseStatus.filter
- Remove
TestCase.check_priority
, usePriority.filter
- Update signature for
TestCase.create
, no longer acceptsplan
,component
andbug
dict attributes. Instead useTestPlan.add_case
,TestCase.add_component
andBug.create
- Remove
TestCase.detach_bug
, useBug.remove
- Remove
TestCase.filter_count
- Remove
TestCase.get
, useTestCase.filter
- Remove
TestCase.get_bugs
, useBug.filter({'case': ?})
- Remove
TestCase.get_bug_systems
- Remove
TestCase.get_case_status
, useTestCaseStatus.filter
- Update signature for
TestCase.get_components
- Remove
TestCase.get_plans
, useTestPlan.filter({'case': ?})
- Remove
TestCase.get_priority
, usePriority.filter
- Remove
TestCase.get_tags
, useTag.filter({'case': ?})
- Remove
TestCase.get_text
, useTestCase.filter
- Remove
TestCase.link_plan
, useTestPlan.add_case
- Rename
TestCase.notification_add_cc
toTestCase.add_notification_cc
and update signature - Rename
TestCase.notification_get_cc_list
toTestCase.get_notification_cc
and update signature - Rename
TestCase.notification_remove_cc
toTestCase.remove_notification_cc
and update signature - Update signature for
TestCase.remove_component
- Update signature for
TestCase.remove_tag
- Remove
TestCase.store_text
, useTestCase.update
withsetup
,breakdown
,action
andeffect
attributes in the parameter dict -
Remove
TestCase.unlink_plan
, useTestPlan.remove_case
-
Remove
TestCasePlan.get
-
Remove
TestCasePlan.update
-
Update
TestCaseRun.add_comment
to accept a single ID as first parameter - Remove
TestCaseRun.attach_bug
, useBug.create
- Rename
TestCaseRun.attach_log
toTestCaseRun.add_log
- Remove
TestCaseRun.detach_bug
, useBug.remove
- Rename
TestCaseRun.detach_log
toTestCaseRun.remove_log
- Remove
TestCaseRun.get
, useTestCaseRun.filter
- Remove
TestCaseRun.get_bugs
, useBug.filter({'case_run': ?})
- Remove
TestCaseRun.get_case_run_status_by_name
-
Update signature for
TestCaseRun.update
-
Remove
TestPlan.add_component
- Update signature for
TestPlan.add_tag
- Remove
TestPlan.check_plan_type
, usePlanType.filter
- Remove
TestPlan.filter_count
- Remove
TestPlan.get
, useTestPlan.filter
- Remove
TestPlan.get_all_cases_tags
- Remove
TestPlan.get_components
- Remove
TestPlan.get_env_groups
, useEnv.Group.filter({'testplan': ?})
- Remove
TestPlan.get_plan_type
, usePlanType.filter
- Remove
TestPlan.get_product
, useProduct.filter({'plan': ?})
- Remove
TestPlan.get_tags
, useTag.filter({'plan': ?})
- Remove
TestPlan.get_test_cases
, useTestCase.filter({'plan': ?})
- Remove
TestPlan.get_test_runs
, useTestRun.filter({'plan': ?})
- Remove
TestPlan.get_text
, useTestPlan.filter
- Rename
TestPlan.link_env_value
toTestPlan.add_env_value
and update signature - Remove
TestPlan.remove_component
- Update signature for
TestPlan.remove_tag
- Remove
TestPlan.store_text
, useTestPlan.update
with atext
attribute in the parameter values -
Rename
TestPlan.unlink_env_value
toTestPlan.remove_env_value
and update signature -
Rename
TestRun.add_cases
toTestRun.add_case
and update signature - Update signature for
TestRun.add_tag
- Update signature for
TestRun.create
, no longer acceptscase
dict attribute. Instead useTestRun.add_case
- Remove
TestRun.filter_count
- Remove
TestRun.get
, useTestRun.filter
- Remove
TestRun.get_bugs
- Remove
TestRun.get_env_values
, useEnv.Value.filter({'testrun': ?})
- Remove
TestRun.get_tags
, useTag.filter({'run': ?})
- Rename
TestRun.get_test_cases
toTestRun.get_cases
- Remove
TestRun.get_test_case_runs
, useTestCaseRun.filter({'run': ?})
- Remove
TestRun.get_test_plan
, useTestPlan.filter({'run': ?})[0]
- Rename
TestRun.remove_cases
toTestRun.remove_case
and update signature - Update signature for
TestRun.remove_tag
-
Update signature for
TestRun.update
-
Rename
User.get
toUser.filter
- Rename
User.join
toUser.join_group
- Update signature for
User.update
Models and database migrations
- Remove model
TestEnvironment
- Remove model
TestEnvironmentCategory
- Remove model
TestEnvironmentElement
- Remove model
TestEnvironmentMap
- Remove model
TestEnvironmentProperty
- Remove model
TestPlanComponent
- Remove
TestPlan.get_text_with_version()
- Remove
TestRun.get_previous_or_next()
IMPORTANT: this release introduces new database migrations!
tcms-api changes since 1.5.1
- Make the code compatible with Kiwi TCMS XML-RPC v4.0.0
- Rename
Status
toTestCaseRunStatus
- Rename
CaseRun
toTestCaseRun
- Remove
PlanStatus
, useTestPlan.is_active
- Remove
RunStatus
, useTestRun.finished
- Remove
TestPlan.components
container - Update signature for
TestPlan
. Now accepttext
kwarg in constructor instead ofdocument
.
How to upgrade
If you are using Kiwi TCMS as a Docker container then
cd Kiwi/
docker-compose down
docker pull kiwitcms/kiwi
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
Happy testing!