Kiwi TCMS 5.2

We're happy to announce Kiwi TCMS version 5.2! This release introduces new database migrations and converts the Docker image to a non-root user with uid 1001. You may have to adjust ownership/permissions on the kiwi_uploads Docker volume!

The new kiwitcms/kiwi:latest docker image has Image ID 6bc4e3124fd4. https://demo.kiwitcms.org has also been updated!

Changes since Kiwi TCMS 5.1

Enhancements

  • Upgrade to Django 2.1
  • Upgrade to django-report-builder 6.2.2, compatible with Django 2.1
  • Docker image now executes with uid 1001 instead of root
    • image based on centos7 image instead of centos/httpd
    • image now exposes ports 8080 and 8443
    • Apache logs now printed on Docker console
    • SSL certificates copied to /Kiwi/ssl inside Docker image instead of being bind-mounted
    • uploads dir changed to /Kiwi/uploads
    • static dir changed to /Kiwi/static
    • /Kiwi is now owned by uid 1001
    • /venv is now owned by uid 1001
    • docker-compose.yml is updated to match
  • Fix pylint errors (Ivaylo Ivanov)
  • Allow users to see other profiles via Admin
  • Use password change form from Admin instead of custom one
  • product.py will try to import local_settings.py if available in the same directory. This can be used to customize settings in downstream distributions
  • Updated Slovenian translation

Bug fixes

  • Make password reset views public
  • Don't crash when adding new users via Admin

Refactoring

  • Remove UserProfile model. Kiwi TCMS doesn't needs extra information about users so we remove this part of the application. Custom installations may choose to define their own profiles if they wish
  • Remove custom DBModelBackend authentication backend
  • Remove unused tcms.core.context_processors.auth_backend_processor
  • Remove unused get_using_backend(). Fixes Issue #261
  • Remove dj_pagination. Fixes Issue #110

Settings

  • AUTHENTICATION_BACKENDS is removed
  • PAGINATION_DEFAULT_PAGINATION is removed
  • Navigation menu links are now defined in MENU_ITEMS and can be redefined

Signals

  • USER_REGISTERED_SIGNAL now doesn't receive the backend parameter

How to upgrade

If you are using Kiwi TCMS as a Docker container then:

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Don't forget to backup before upgrade!

How to override templates for Kiwi TCMS

This is the first publication in our customization series. It will show you how to override any template used by Kiwi TCMS. As an example we will override the email template that is used when registering new account. By default the email text looks like this:

    Welcome {{ user }},
    thank you for signing up for an {{ site_domain }} account!

    To activate your account, click this link:
    {{ confirm_url }}

https://demo.kiwitcms.org runs a custom Docker image based on kiwitcms/kiwi. For this image the confirmation email looks like this

    Welcome {{ user }},
    thank you for signing up for our Kiwi TCMS demo!

    To activate your account, click this link:
    {{ confirm_url }}

    GDPR no longer allows us to automatically subscribe you to
    our newsletter. If you wish to keep in touch and receive emails
    with news and updates around Kiwi TCMS please subscribe at:
    https://kiwitcms.us17.list-manage.com/subscribe/post?u=9b57a21155a3b7c655ae8f922&id=c970a37581

    --
    Happy testing!
    The Kiwi TCMS team
    http://kiwitcms.org

The file that we want to override is tcms/templates/email/confirm_registration.txt.

Create a local directory (git repository) which will hold customization configuration and create a file named templates.d/email/confirm_registration.txt with your text!

Next you want to make this file available inside your docker image so your Dockerfile should look like this:

    FROM kiwitcms/kiwi

    COPY ./templates.d/ /venv/lib64/python3.6/site-packages/tcms/overridden_templates/
    COPY local_settings.py /venv/lib64/python3.6/site-packages/tcms/settings/

where local_settings.py contains

    import os
    from django.conf import settings

    settings.TEMPLATES[0]['DIRS'].insert(0, os.path.join(settings.TCMS_ROOT_PATH, 'overridden_templates'))

The following code states instruct Django to look into overridden_templates first and use any templates it finds there; also make my files available in that specific location inside the docker image.

This approach can be used for all templates that you wish to override. Take into account that file names must match (Django searches templates by directory path). Now build your customized Docker image and use that for deployment!

Happy testing!

Kiwi TCMS 5.1

We're happy to announce Kiwi TCMS version 5.1! This release introduces new database migrations, an experimental reporting feature, deprecated functionality and bug fixes.

The new kiwitcms/kiwi:latest docker image has Image ID cc9b55aa664d. https://demo.kiwitcms.org has also been updated!

Changes since Kiwi TCMS 5.0

Enhancements

  • Integrate with Django Report Builder as tech-preview. This makes it possible for power users and administrators to generate tabular reports. You will have to know the existing DB schema if you want to create your own reports. See http://kiwitcms.readthedocs.io/en/latest/db.html. This feature is in tech-preview and it may be removed if it doesn't work out. Please comment at: Issue #452.
  • Allow using manage.py dumpdata|loaddata|sqlflush|dbshell for backups, see blog post
  • In TestCase view page add a link to delete the current test case
  • In TestCase Admin page the + Add TestCase button now allows to create new test case
  • The version menu item in the helper menu now links to Changelog

Deprecated functionality

  • Start showing deprecation warning for Advanced search, see Issue #448

Bug fixes

  • Allows Product/Version/Build to be shown in Testing Report. Fixes Sentry KIWI-TCMS-2C
  • Default to https:// links if not running locally. Fixes Issue #450
  • Apply missing CSS class for object history table so it can be displayed nicely

Refactoring

  • Squash some database migrations
  • Fix a number of pylint issues
  • Remove unused testruns.views::view_caseruns(). References Issue #316
  • Remove unused template report/caserun.html
  • Handle TestRun deletion via admin not home grown code

How to upgrade

If you are using Kiwi TCMS as a Docker container then:

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Don't forget to backup before upgrade!

Help us make Kiwi TCMS better

According to our 2018 roadmap update the Kiwi TCMS team is investing a great deal of our time to make the code base more maintainable! For the past few releases we've been balancing code refactoring with bug-fixing and enhancements and we have lots of ideas down the line.

We want to hear your voice! Tell us how you use Kiwi TCMS inside your organization. We want to know what works for you and what doesn't so we can make it better. Feel free to comment below, file GitHub issues or send us an email.

Happy testing!

How to backup Docker volumes for Kiwi TCMS

When you start Kiwi TCMS by running docker-compose up (see here) it will automatically create 2 volumes: kiwi_db_data and kiwi_uploads. This blog post will outline how to backup these docker volumes.

Backing up the database

Kiwi TCMS is a Django application and the manage.py command provides an easy way to dump and load the database contents. To export all contents on your docker host execute:

docker exec -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2 > database.json

This will create a file named database.json in the current directory, outside of the running container!

You can restore the database contents by using the following commands:

# delete data from all tables
docker exec -it kiwi_web /bin/bash -c '/Kiwi/manage.py sqlflush | /Kiwi/manage.py dbshell'
# then reload the existing data
cat database.json | docker exec -i kiwi_web /Kiwi/manage.py loaddata --format json -

NOTE: depending on your scenario you may want to remove the existing volume (docker-compose down && docker volume rm kiwi_db_data) and re-create the DB schema (/Kiwi/manage.py migrate) before restoring the contents!

WARNING: the above steps are applicable to Kiwi TCMS 5.1 or above. On earlier versions manage.py will fail due to various issues.

Backing up file uploads

Uploaded files can easily be backed up with:

docker exec -it kiwi_web /bin/tar -cP /var/kiwi/uploads > uploads.tar

and then restored:

cat uploads.tar | docker exec -i kiwi_web /bin/tar -x

You may also try the rsync command but be aware that it is not installed by default!

The same approach may be used to backup /var/lib/mysql/ from the kiwi_db container.

Alternatives

By default both docker volumes created for Kiwi TCMS use the local driver and are available under /var/lib/docker/volumes/<volume_name> on the host running your containers. You can try backing them up from there as well.

Another alternative is to use the docker-lvm-plugin and create these volumes as LVM2 block devices. Then use lvcreate -s command to create a snapshot volume. For more information see chapter 2.3.5. Snapshot Volumes from the LVM Administrator Guide for Red Hat Enterprise Linux 7.

Happy testing!

Mid-year roadmap status report

Hello everyone, in this article I will outline the progress that the Kiwi TCMS team has made towards achieving the goals on our roadmap.

Make code easier to maintain

Status: moderate progress

Initially CodeClimate reported a "D" rating with a 1 year estimated effort. Now it is still on "D" rating with a 7 months estimated effort to bring the project back in shape. Code smells have dropped from 600+ to 418, duplications have been reduced from 600+ to 359! At the same time technical debt ratio has been decreased from 32,5% to 21,6% and little over 10000 lines of code have been removed from the source code. Checkout the stats for more info!

Use pylint and pylint-django

Status: good progress

Both pylint and pylint-django have been integrated into our CI workflow. There are even a few custom built plugins that we use. The number of issues reported is down to around 900 from 4000+ initially. The cleanup has been lead by Anton Sankov with help from Ivaylo Ivanov and myself.

Render HTML, return JSON

Status: no progress

Several views were probably modified to return pure JSON in the meantime but we've not done any targeted work to resolve this issue.

Submit forms, post JSON, GET clean URLs

Status: no progress

Same as above, not much has been done in this area.

API layer

Status: complete

After Kiwi TCMS v4.0 the server side API has been reorganized and updated to follow the model/method names used internally.

After the recent version 5.0 the client side API library has been stripped to its most basic form so that you can work directly with the responses from the server.

There is no more duplication and ambiguity in names because there isn't a lot of code left!

Documentation

Status: moderate progress, dropped

All RPC methods have been documented! The rest of the internals will be documented as we go along.

No vendored JavaScript libraries

Status: moderate progress

Several JavaScript libraries have been removed but we still carry around jQuery and Handlebars.js. No work has been done to convert Kiwi TCMS to use the jQuery version provided with Django.

Less HTML templates with better organization

Status: minimal progress

There are still over 100 HTML templates in Kiwi TCMS. Some of the HTML templates have been merged together, some email templates have been refactored and marked as translatable but the majority of them have not been updated for a long time.

Modern interface with Patternfly

Status: no progress

JavaScript updates and front-end testing

Status: small progress

A number of JavaScript functions have been refactored and removed during the past few releases but there are still thousands of lines of code left to deal with.

Community efforts

Status: moderate progress

We are seeing a steady stream of new users registered on https://demo.kiwitcms.org and there are several active contributors (issues, translations).

Kiwi TCMS was represented at OSCAL Tirana, DjangoCon Heidelberg and PyCon Prague! We're planning to attend HackConf and OpenFest in Sofia by the end of the year.

Happy testing!

Kiwi TCMS 5.0

We're happy to announce Kiwi TCMS and tcms-api version 5.0! This release introduces object history tracking, removal of old functionality and unused code, lots of internal updates and bug fixes.

The new kiwitcms/kiwi:latest docker image has Image ID 468de0abe8a8. https://demo.kiwitcms.org has also been updated!

Changes since Kiwi TCMS 4.2

Settings

  • Remove CACHE because not used
  • Remove PLAN_EMAIL_TEMPLATE, CASE_EMAIL_TEMPLATE and CASE_DELETE_EMAIL_TEMPLATE. Templates can still be overridden if desired

Enhancements

  • Upgrade to Django 2.0.7
  • Allow to delete TestPlan. Fixes Issue #273
  • Don't include username in dashboard URL
  • Copy latest TestPlan text when cloning
  • Always require users to be logged in. Anonymous users will not be allowed access by default. Read-only access to some views (e.g. get TestPlan or TestRun) can be enabled by disabling GlobalLoginRequiredMiddleware! Fixes Issue #230
  • Start tracking change history for TestPlan, TestCase, TestRun and TestCaseRun. Fixes Issue #294
  • History changes are recorded as unified diff which is a universally recognized format
  • Show the actual changes in email notifications. Fixes Issue #199

Bug fixes

  • Fix UnboundLocalError local variable 'message' referenced before assignment. Fixes Sentry KIWI-TCMS-1S
  • Make email address unique when adding users via admin panel. Fixes Issue #352 and Issue #68
  • Fix unsupported operand type(s) for +=: 'int' and 'datetime.timedelta' by initializing timedelta variable properly. Fixes Sentry KIWI-TCMS-1Y
  • Remove core.models.fields with MySQL time conversions. Fixes Issue #390
  • Fix bad JavaScript comparison. Fixes Coverity #289956
  • Remove expression with no effect. Fixes Coverity #289974
  • Rewrite request_host_link() to fix Coverity #289987
  • Fix Coverity #289923 - Typo in identifier
  • Don't send emails for changes performed by myself. Fixes Issue #216

Refactoring

  • Fix pylint issues in several modules (Anton Sankov & Ivaylo Ivanov)
  • Fix wrong Plan Type template variable in advanced search form
  • Do not use Model.objects.update() because it doesn't respect history
  • Use the standard ModelChoiceField instead of custom one
  • Use updateRunStatus() instead of deprecated updateObject()
  • Simplify JavaScript function getInfo() and use it multiple times
  • Simplify previewPlan() by removing unused parameters
  • Unify addChildPlan() and removeChildPlan()
  • Unify getInfoAndUpdateObject() with changeCaseRunAssignee()
  • Unify onTestCaseStatusChange() with changeTestCaseStatus()
  • Convert TestCaseEmailSettings.cc_list to string field
  • Merge report/caseruns_table.html with reports/caseruns.html
  • Rename model UserActivateKey to UserActivationKey. Fixes Issue #276
  • Remove cached_entities(). Fixes Issue #307
  • Remove TestPlanText.checksum field
  • Remove checksum fields for TestCaseText model
  • Remove unused and home-grown template tags
  • Remove unused fields auto_blinddown, description, sortkey from TestCaseRunStatus model. Fixes Issue #186
  • Remove Meta.db_name effectively renaming all tables. New names will use Django's default naming scheme
  • Remove RawSQL queries. We are now 100% ORM based. Fixes Issue #36
  • Remove duplicate MultipleEmailField definition
  • Remove TCMSLog view, TCMSLogManager, TCMSLogModel
  • Remove TestPlanText model, use TestPlan.text instead
  • Remove unused JavaScript files - lib/detetmine_type.js - lib/hole.js - lib/scriptaculous-controls.js.patch - lib/validations.js - static/js/index.js
  • Remove constructPlanParentPreviewDialog()
  • Remove changeCasePriority()
  • Remove changeCaseRunOrder()
  • Remove debug_output() from JavaScript files
  • Remove deprecated /ajax/update/ end-point
  • Remove taggleSortCaseRun()
  • Remove strip_parameters()
  • Remove _InfoObjects.users()
  • Remove get_value_by_type()
  • Remove testcases.views.get_log()
  • Remove mail_scene() methods and related templates

Removed functionality

  • TestRun completion status is no longer updated automatically. You can still update the status manually via the 'Set Finished' or 'Set Running' links! Fixes Issue #367
  • Remove bookmarks functionality. There are many great bookmark manager apps and if the user is keen on bookmarks they should use one of them. Closes Issue #67 and Issue #210
  • Don't track & display history of changes for EnvGroup model
  • Remove Disable/Enable buttons from TestPlan page. Enabling and disabling can still be done via the edit page
  • Remove changeParentPlan() and the ability to change TestPlan parents from the 'Tree View' tab. This can be done via the edit page
  • When viewing a TestPlan the user is no longer able to specify a sorkey for a particular TestCase. Instead they can use the Re-order cases button and move around the entire row of cases to adjust the sort order
  • When working with test case results, inside a TestRun you will not be allowed to change the order of execution. Order should be defined inside the TestPlan instead
  • Remove XmlRpcLog() model. Kiwi TCMS will no longer log RPC calls to the database. This leads to a small performance boost and can be overridden on individual basis if you need to do so.

Translations

  • More source strings marked as translatable
  • New translations for Chinese Simplified, Chinese Traditional, German and Slovenian
  • Stop keeping compiled translations under git. Fixes Issue #387

tcms-api changes since 4.2

  • Requires Python 3.6 or newer because it fixes bugs related to Django's disabling of keep-alive connections. See https://bugs.python.org/issue26402
  • The rpc client is now accessed via TCMS().exec.<Server-Method>
  • Leave only XML-RPC transport classes! This removes the top-level interface behind the API client and the consuming side is left to work with Python dictionaries instead of objects.
  • Remove the interactive tcms script
  • Remove tcms_api.config module
  • Remove logging class
  • Remove script_examples/ directory. These were never tested and maintained

How to upgrade

If you are using Kiwi TCMS as a Docker container then:

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
docker exec -it kiwi_web /Kiwi/manage.py populate_history --auto

Help us make Kiwi TCMS better

According to our 2018 roadmap the Kiwi TCMS team is investing a great deal of our time to make the code base more maintainable! For the past few releases we've been balancing code refactoring with bug-fixing and minor enhancements and we have lots of ideas down the line.

We want to hear your voice! Tell us how you use Kiwi TCMS inside your organization. We want to know what works for you and what doesn't so we can make it better. Feel free to comment below, file GitHub issues or send us an email.

Happy testing!

Kiwi TCMS 4.2

We're happy to announce Kiwi TCMS and tcms-api version 4.2! This is a security, bug-fix and enhancement update which upgrades to the latest Django version under Python 3.6. We've pushed new kiwitcms/kiwi:latest docker image to Docker Hub and updated the demo instance at https://demo.kiwitcms.org!

This version also includes GDPR related changes which affect our project. Read below for the details.

Changes since Kiwi TCMS 4.1.4

IMPORTANT: this release introduces new database migrations

Security

Settings

Enhancements

Bug fixes

Translations

Documentation

Models and database migrations

GDPR related

In addition the following changes were deployed to our infrastructure:

We're trying to be respectful to your private data and not expose that to any 3rd parties or use it for means other than making Kiwi TCMS better open source software. If you spot areas for improvement please report an issue so we can take a look at it!

tcms-api changes since 4.0.0

How to upgrade

If you are using Kiwi TCMS as a Docker container then

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Help us make Kiwi TCMS better

According to our 2018 roadmap the Kiwi TCMS team is investing a great deal of our time to make the code base more maintainable! For the past few releases we've been balancing code refactoring with bug-fixing and minor enhancements and we have lots of ideas down the line.

We want to hear your voice! Tell us how you use Kiwi TCMS inside your organization. We want to know what works for you and what doesn't so we can make it better. Feel free to comment below, file GitHub issues or send us an email.

Happy testing!

Kiwi TCMS conference presence

Kiwi TCMS is going on a small conference tour. This is where you can find us in the next couple of months:

For all of the 3 conferences we're going to have a project presence. In addition to that you can catch-up with Alex Todorov, Kiwi's project lead at: TestCon Moscow(17-19 April, Moscow), Romanian Testing Conference(9-11 May, Cluj-Napoca), PyCon CZ(1-3 June, Prague) and DEVit(10-11 June, Thessaloniki).

If you can ping us at @KiwiTCMS or look for the kiwi bird logo and come to say hi!

Kiwi TCMS 4.1.4

We're happy to announce Kiwi TCMS version 4.1.4! This is a bug-fix and enhancement update which upgrades to the latest Django version, resolves several issues and includes lots of internal code updates.

We've pushed new kiwitcms/kiwi docker image to Docker Hub and updated the demo instance at https://demo.kiwitcms.org!

Changes since Kiwi TCMS 4.1.3

Enhancements

Signals

BREAKING CHANGES:

Bug fixes

Refactoring

How to upgrade

If you are using Kiwi TCMS as a Docker container then

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Help us make Kiwi TCMS better

According to our 2018 roadmap the Kiwi TCMS team is investing a great deal of our time to make the code base more maintainable! For the past few releases we've been balancing code refactoring with bug-fixing and minor enhancements and we have lots of ideas down the line.

We want to hear your voice! Tell us how you use Kiwi TCMS inside your organization. We want to know what works for you and what doesn't so we can make it better. Feel free to comment below, file GitHub issues or send us an email.

Happy testing!

Kiwi TCMS 4.1.3

We're happy to announce Kiwi TCMS version 4.1.3! This is a bug-fix and enhancement update which upgrades to the latest Django version, provides easier way for Docker administrators to override SSL certificates and access httpd log files and resolves several issues. This release also includes lots of internal code refactoring which removes code duplication and brings down CodeClimate metrics to 26.9% of technical debt or 10 months to fix.

We've pushed the new kiwitcms/kiwi docker image to Docker Hub and updated the demo instance at https://demo.kiwitcms.org. Starting forward the demo will use the info-at-kiwitcms.org email address for all communication sent. There are real people behind this address so if you write to us we will reply!

Changes since Kiwi TCMS 4.1.0

Enhancements

Bug fixes

Refactoring

Settings

Models and database migrations

API clients must now send values for estimated_time which must be in a format that parse_duration() understands, for example 'DD HH:MM:SS'! See https://docs.djangoproject.com/en/2.0/ref/utils/#django.utils.dateparse.parse_duration

IMPORTANT: this release introduces new database migrations!

Translations

There are new translatable strings introduced with this release! At this moment translating Kiwi TCMS in languages other than English is purely a community effort. If you'd like to help consult our translations contribution page.

How to upgrade

If you are using Kiwi TCMS as a Docker container then

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Help us make Kiwi TCMS better

According to our 2018 roadmap the Kiwi TCMS team is investing a great deal of our time to make the code base more maintainable! For the past few releases we've been balancing code refactoring with bug-fixing and minor enhancements and we have lots of ideas down the line.

We want to hear your voice! Tell us how you use Kiwi TCMS inside your organization. We want to know what works for you and what doesn't so we can make it better. Feel free to comment below, file GitHub issues or send us an email.

Happy testing!

Kiwi TCMS 4.1.0

We're happy to announce Kiwi TCMS version 4.1.0! This is a bug-fix and enhancement update centered around providing more flexibility for administrators to configure the user approval process. Refer to the documentation for more information about signals handling in Kiwi TCMS.

Changes since Kiwi TCMS 4.0.0

Enhancements and bug fixes

Refactoring

Settings

Models and database migrations

IMPORTANT: this release introduces new database migrations!

Translations

There are new translatable strings introduced with this release, including translations of a few email templates! At this moment translating Kiwi TCMS in languages other than English is purely a community effort. If you'd like to help consult our translations contribution page.

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!

Kiwi TCMS & tcms-api version 4.0.0

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

Settings

RPC methods refactoring

Models and database migrations

IMPORTANT: this release introduces new database migrations!

tcms-api changes since 1.5.1

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!

Kiwi TCMS version 3.50

We're happy to announce Kiwi TCMS version 3.50 and the corresponding tcms-api version 1.5.1! This is a bug-fix and enhancement release and we advise you to upgrade as soon as possible!

Changes since Kiwi TCMS 3.49

Enhancements and bug fixes

Refactoring

tcms-api changes since 1.5.0

IMPORTANT: this release introduces new database migrations!

How to upgrade

If you are using Kiwi TCMS as a Docker container then

cd Kiwi/
docker-compose down
make docker-image
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Happy testing!

Kiwi TCMS roadmap for 2018

Hello everyone. As you know Kiwi TCMS has been around for a while and it has gone through some big changes in the last year! It started as an abandoned Django 1.6 project with broken test suite and is now currently running on the latest Django 2.0.1 with Python 3.5! It is clearly a legacy code base!

We, the Kiwi TCMS team, have learned a lot more about the project and this blog post describes our roadmap for 2018 in terms of technical work and community engagement. The general technical direction is cleaner/simpler code, improved UI/UX and more tests!

Make code easier to maintain

The current code is a bunch of very large modules and functions and classes bundled together. It is also old and sometimes looks like spaghetti code. CodeClimate gives us a "D" rating for maintainability with a 1 year estimated effort to fix that. There are 600+ code smells and 600+ duplications detected by CodeClimate. Our goal is to get this number down to zero!

Use pylint and pylint-django

pylint is the standard static analyzer for Python and currently it reports over 4000 errors and warnings when executed against Kiwi TCMS. This is a huge number and it needs to become zero! We've also identified interesting patterns that will make it into pylint and pylint-django plugins!

Render HTML, return JSON

The current state of affairs is a mix and match of everything. There are views that render HTML, others which return pure JSON, other which return HTML encoded as JSON string and probably everything in between. Views that render pages need to do just that and views that are used with AJAX calls from the UI need to return pure JSON! A lot of these are hiding in plain sight and will come to light when we start overhauling the user interface.

Submit forms, post JSON, GET clean URLs

There are lots of forms in Kiwi TCMS. Sometimes they are submitted by the user and other times they are serialized and POSTed by some JavaScript code. This isn't very easy to understand plus this entire home-grown utility code doesn't bring anything useful to the project. All of these need to be identified and cleaned up. JavaScript code needs to send or consume JSON, nothing else!

There are also lots of places where Kiwi issues GET requests with a number of query parameters. Our goal is to minimize these and where possible have the parameters as part of the Django urls scheme, not as query strings.

API layer

The current API module is a bit disorganized. API namespaces don't match the names of the underlying DB models and the API client classes don't match any of the other two! The way we pass parameters and what these parameters are named should match between the client, the RPC method and the underlying model!

In earlier releases we've removed duplicate or similar RPC methods and we think there are more of these that need our love.

Documentation

We've started producing documentation from doc-strings and most of the RPC methods have such. However it is unformatted and barely readable, sometimes even inaccurate. Previous releases made progress on this but there's a lot more to cover.

All RPC methods should be documented first and then the rest of Kiwi's internals to make development easier!

No vendored JavaScript libraries

There are 11 vendored-in JavaScript files that we carry around in Kiwi TCMS. Most notable are jQuery plus a few addons and Handlebars.js. To the extent possible our goal is to use jQuery provided by Django or installed via NPM dependencies!

Less HTML templates with better organization

There are over 100 HTML templates in Kiwi TCMS. There are also email and even JavaScript templates. For example there are get_cases.html and get_review_cases.html which are essentially the same. This is kind of also true for templates used in new and edit views! Such templates should be unified!

Those JavaScript templates need to be totally gone!

All templates are stuffed together in a single directory and their names are not very predictable. They need to be split per application and follow some kind of naming convention.

Modern interface with Patternfly

The UI already uses the Patternfly library for some of its widgets. Most notably the main navigation header. Our goal is for the entire UI to be ported to Patternfly by updating widgets HTML and CSS where needed. This will also help clean things up a lot. At the same time we'll be rethinking how information is organized on screen and how the person interacts with it! Usability suggestions are very welcome!

This move will also help us get rid of the Handlebars dependency which is now used for pop-up dialogs.

JavaScript updates and front-end testing

There's lots of JavaScript code on the front-end and honestly we don't quite know what it does or how it is organized. There are also no tests on the front-end whatsoever!

It is our goal for this to change with the intention to not overdo the JavaScript part and keep things very minimal. At the moment we're thinking about vanilla jQuery that will act as a proxy between the browser and the back-end!

Community efforts

A year ago hardly anybody knew what Kiwi TCMS was, the project didn't even have this name, there was 1 active contributor and hardly any users! Now the community has started to slowly revitalize, we're seeing some contributions from our junior team members (more on this in another blog post) and also seeing folks installing and using Kiwi TCMS and reporting interesting bugs and feature requests around it!

For the upcoming year our goal is to seek active engagement with other open source projects that could make use of Kiwi TCMS and work with them. Kudos to openSUSE for being the first to propose such integration! We're also planning couple of appearances at a few conferences but there's nothing confirmed yet.

Every other contribution in terms of bug reports, new users and feature requests is of course welcome but we're very conscious of the fact that there's tons of work to be done and the team is still very small!

Team wise we'd like to get the existing team members up to speed and tackle the above tasks with priority. This will also help us introduce bug fixes and new features more quickly!

Happy testing!

Kiwi TCMS version 3.49

Happy New Year to everyone. We're happy to announce Kiwi TCMS version 3.49 and the corresponding tcms-api version 1.5.0! This release includes a fair amount of bug fixes and many changes related to Kiwi's RPC layer!

Most importantly Kiwi is updated to Django 2.0.1, the API client no longer supports Python 2 and many RPC methods have been removed or updated. http://demo.kiwitcms.org has also been updated so you can explore the new version.

Changes since Kiwi TCMS 3.48

Enhancements and bug fixes

NOTE: Since django-attachments introduces new permission objects you will have to adjust default permissions for existing users! In order for them to be able to upload/delete their own files they need to have attachments.add_attachment and atachments.delete_attachment permissions.

These same permissions are added by default to the 'Tester' group. If you are running an existing installation registering a new user with Kiwi TCMS will update the default permissions for this group!

Refactoring

Settings

Server side API

tcms-api changes since 1.4.0

IMPORTANT: this release introduces new database migrations!

How to upgrade

If you are using Kiwi TCMS as a Docker container then

cd Kiwi/
docker-compose down
make docker-image
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Happy testing!

Kiwi TCMS Python API client

We are happy to announce the first official release of the tcms-api package! This is a Python client for Kiwi TCMS.

There are couple of main distinctions in this module:

For more information you should check-out the documentation and the script_examples/ directory.

At the moment the API client is both Python2 and Python3 compatible, however it is tested only under Python3!

A bit of history

The original API client, like Kiwi TCMS itself began its origin under a different name and was created primarily by Petr Splichal. Since then Kiwi TCMS has evolved and we've decided that the API module needs to evolve as well. At the moment the tcms-api module is a bit rough around the edges, its documentation is not really the best one and it's currently advisable to spend some time reading the code to figure out how everything works.

We're going to improve on all of these areas and we need help from the community to do so! Please download the tcms-api module, check it out, write and contribute example scripts (you can use the demo site for this), send us bug reports, suggestions and pull requests!

Happy testing!

Kiwi TCMS version 3.48

We're proud to announce Kiwi TCMS version 3.48! This is the first release to be announced on our blog and it is also an important one!

Kiwi TCMS 3.48 introduces new versions of Django and Patternfly, a Python API client library, many bug-fixes and updated documentation.

Changes since KiwiTCMS 3.44

IMPORTANT: this release introduces new database migrations!

NOTE: the API client has been initially developed as the python-nitrate project by Petr Splichal and other contributors! We've decided to fork their code base into Kiwi's repository and continue further development in a central place. This makes it easier testing the API server and client together and allows us to move more rapidly!

As of now there isn't a lot of documentation and examples on how to use the API client but we are looking to improve this. Additional documentation and examples will be published in the project's repository or on this blog!

How to upgrade

If you are using Kiwi TCMS as a Docker container then

cd Kiwi/
docker-compose down
make docker-image
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Happy testing!

Testing, testing. It works!

Welcome to the official website and blog of Kiwi TCMS. We are happy to finally be online!

This website was built with the help of Kaloyan Krastev, Tsvetoslav Garkov and Ivaylo Ivanov who will be joining the project a bit later as well.

In this blog you can expect various news and progress reports around the project, announcement of new releases and future plans. We would love to hear your feedback so please use the comments form below.

Happy testing!

Subscribe to our newsletter