# ApTest Manager Release Notes

*Last Update: 26 May 2026*

---

## 3.1

This is a major infrastructure release that migrates the internal storage
engine from BerkeleyDB to SQLite, delivers significant performance
improvements across synchronization and upgrade operations, adds new CLI
flags for non-interactive and deferred-sync deployments, and improves SQL
mirroring reliability. The installer and upgrade tools now provide guided
experiences with prerequisite checks and real-time progress reporting.

### SQLite Storage Migration

ApTest Manager now uses SQLite as the default storage backend for all
internal databases (test cases, sessions, test sets, requirements,
reports, filters, searches, user accounts, and configuration).

**Why SQLite?**

- **Network storage stability:** BerkeleyDB is unreliable on NFS and
  CIFS mounts, leading to database corruption and stale lock files.
  SQLite's WAL (Write-Ahead Logging) mode handles network-attached
  storage gracefully.

- **No stale lock file issues:** BerkeleyDB leaves orphaned `.lockW`
  files after unclean shutdowns (power loss, killed processes), requiring
  manual cleanup.  SQLite recovers automatically.

- **Architecture-independent files:** BerkeleyDB `.dbm` files are tied
  to the CPU architecture that created them and cannot be moved between
  different platforms.  SQLite files are portable across all architectures,
  making backups, restores, and server migrations straightforward.

- **Reduced dependencies:** SQLite ships as a single C library bundled
  with DBD::SQLite.  BerkeleyDB requires a specific system library version
  matched to the Perl binding.

**Upgrade behavior:**

- On first upgrade, all existing BerkeleyDB data is automatically
  migrated to SQLite.  The original `.dbm` files are preserved as a
  safety net.

- Migration time depends on installation size.  Large installations
  (100K+ test cases, 10K+ sessions) may take several minutes.

- To remove legacy `.dbm` files after confirming the migration is
  successful, run: `perl bin/migrate-to-sqlite.pl --delete-old`. Note that the if the legacy `.dbm` files remain in the system they will not be used nor kept up to date.  The real data will be maintained in the `.sqlite` files going forward.

**Opting out:**

If you are not ready to migrate, add the following to `localconfig.pl`
before running the upgrade:

    $ATMConfig::useSQLite = 0 ;

This preserves BerkeleyDB behavior.  Remove the setting and re-run the
upgrade when ready to migrate.  Note that BerkeleyDB support is deprecated, and may be removed in a future release.

### Export and Backup Compatibility

- The `exportAll`, `exportSuite`, and `archiveSuite` tools now produce
  portable flat-text archives regardless of whether the source data is
  stored in SQLite or BerkeleyDB.  Archives created by version 3.1 can
  be restored into older versions.

- `restore.pl` correctly handles data from both SQLite-era and
  pre-SQLite exports.

- Fixed `exportSuite.pl` to preserve the per-suite SQL mirror
  configuration (`SQLCONFIG`), `ATMVERSION`, and filter database
  (`FilterDB`) in export archives. Previously these files were deleted
  during export, requiring manual SQL mirror reconfiguration after every
  restore.

- Fixed `restore.pl` to reset the SQL mirror connection state (`ready=0`)
  after restoring a suite. Previously, a restored suite inherited the
  `ready=1` state from the export, making the system believe the SQL
  mirror was live and synchronized when it was not.

### Performance Improvements

- Suite synchronization is approximately 3x faster overall. On a
  representative database with 19,000 sessions, 102,000 test cases, and
  69,000 requirements, total sync time was reduced from over 18 minutes
  to approximately 6 minutes.

- SQL requirement sync is approximately 4x faster through batched
  insert operations and schema field caching.

- SQL test case sync is approximately 2.5x faster through batched
  operations and elimination of redundant SQL readiness checks during
  the file walk phase.

- Session synchronization now supports parallel processing via a
  configurable number of worker processes. Use the `--workers` flag
  with `updateSuite.pl` and `updateSets.pl` to control parallelism.

- Session refresh operations are substantially faster. The refresh
  algorithm was rewritten to use a collect-and-rebuild approach
  instead of incremental deletions, reducing complexity from O(n^2)
  to O(n). Hash-based lookups replace linear searches for test list
  membership checks. SQL operations are deferred during refresh and
  performed as a single bulk sync at the end. On a session with
  40,000 tests, refresh time was reduced from approximately 7 minutes
  to just over 1 minute.

- Internal schema field lookups (multiLists, tables) are now cached,
  eliminating hundreds of thousands of redundant iterations over
  field definitions during SQL sync operations.

- `updateSets.pl` now skips unnecessary work for sessions that have not
  changed during an upgrade pass. Previously, every session was forced to
  recalculate test counts and flush to disk regardless of whether
  anything had changed. This significantly reduces upgrade time on
  installations where most sessions are already up-to-date.

### New Features

- Added `--progress` flag to `updateSuite.pl` for real-time progress
  reporting during synchronization. Progress is reported for all sync
  phases including file walk, test case/requirement processing, SQL
  synchronization, and session synchronization.

- Added `--workers N` flag to `updateSuite.pl`, `updateSets.pl`,
  `INSTALL.pl`, and `UPGRADE.pl` to control the number of parallel
  worker processes for session synchronization.

- All progress messages now include timestamps and use a unified
  `[HH:MM:SS] (SuiteName) message` format across `updateSuite.pl`,
  `updateSets.pl`, and `syncSQL` for easier performance diagnosis,
  interactive tracking, and log parsing.

- `restore.pl` now accepts `--workers N` and `--progress` flags. These
  are forwarded to `updateSuite.pl` and `updateSets.pl` during the
  post-restore rebuild, enabling parallel and progress-reported restores
  of large suites.

- The `migrate-to-sqlite.pl` migration tool now supports `--progress`
  for real-time progress output during the BerkeleyDB-to-SQLite
  migration. Progress is reported every 100 sessions. This flag is also
  automatically forwarded when `INSTALL.pl` is run with `--progress`.

### SQL Mirroring Reliability

- SQL batch operations now flush periodically during long-running
  sync operations to prevent database connection timeouts.

- Database connections are verified and automatically reconnected
  before executing queued SQL batches.

- Forked worker processes now use independent database connections
  instead of shared cached connections, preventing cross-process
  connection interference.

- SQL mirror synchronization for SQL Server (ODBC) now runs in
  sequential mode. Parallel sync was found to be 5-10x slower than
  sequential for SQL Server due to table-level lock escalation causing
  constant deadlock retries. MySQL and MariaDB are unaffected and
  continue to benefit from parallel sync.

- Fixed the SQL mirror "Test Connection" function in the administration
  UI. After changing any connection setting and clicking Test, the
  connection test was silently failing without an error message. The
  connection is now tested correctly, and the settings are saved only if
  the test succeeds.

### RPC Interface

- Added `refreshSet` RPC command that allows automation agents to
  refresh a single test set by name via the RPC interface. The command
  validates that the set exists, is not locked, and is refreshable
  before performing the refresh. Example usage:

      command=refreshSet&suite=MySuite&set=MySet&rpctoken=TOKEN

- The `refreshSet` command returns test count statistics including
  the number of tests before and after refresh, and the number of
  tests added and removed. When called with `returnJSON=1`, the
  response is a structured JSON object:

      {"result":"success","data":{"message":"42 tests in MySet",
       "tests_before":40,"tests_after":42,"tests_added":2,
       "tests_removed":0}}

  Without `returnJSON`, the response uses the standard text format
  for backward compatibility with existing RPC clients.

- The `refreshSet` command supports an optional `sessionsToo`
  parameter (default: 0). When set to 1, all test sessions
  associated with the set are also refreshed after the set refresh
  completes. Sessions are refreshed in parallel using multiple
  worker processes for improved performance on large suites. Locked
  sessions are automatically skipped. The response includes a
  `sessions_refreshed` count when this option is enabled.

- SQL mirroring operations during RPC refresh are wrapped in
  transaction safety with automatic rollback on failure.

### Docker and Deployment Notes

- **WARNING: SQLite WAL mode (used by ATM 3.1) requires a native Linux
  filesystem. Docker users on macOS or Windows must not use bind mounts
  from the host for ATM data directories.** Host bind mounts via
  VirtioFS (Docker Desktop, OrbStack, Rancher Desktop) are not
  compatible with SQLite WAL shared-memory files and will cause database
  corruption. Use Docker named volumes instead. See
  `examples/docker-volumes/` for a reference `docker-compose.yml` and
  guidance on backup/restore with named volumes.

- Added pre-installation scripts (`examples/linux-package-install/`) for
  Debian/Ubuntu and RHEL/AlmaLinux/Rocky Linux that install ATM's Perl
  module dependencies via the system package manager before running
  `INSTALL.pl`. Using these scripts reduces CPAN build time and avoids
  common compilation failures. `INSTALL.pl` detects the appropriate
  script and suggests it when missing modules are found.

### Installer and Upgrade Improvements

- Added `-y` flag to `INSTALL.pl` for fully non-interactive
  installation. When `-y` is specified, all configuration prompts accept
  their defaults automatically (webTop, topDir, mode, admin password,
  etc.), the HTTP server user and group are auto-detected from the
  system, and CPAN module installs are non-interactive. Useful for
  scripted deployments, Docker images, and CI pipelines.

- Added `-Q` flag to `INSTALL.pl` and `UPGRADE.pl` to defer SQL mirror
  synchronization during upgrade. When `-Q` is specified, the upgrade
  completes normally but SQL tables are marked out-of-sync (`ready=0`)
  rather than rebuilt immediately. Re-sync at a convenient time by
  running: `perl bin/syncSQL -a <suite>`. Also added `--defer` flag to
  `syncSQL` itself to mark suites out-of-sync without connecting to the
  SQL server.

- `UPGRADE.pl` now guides administrators through the upgrade process: it
  displays relevant release notes and requires acknowledgement before
  proceeding, detects whether the SQLite migration will run for the first
  time (verifying prerequisites and warning about migration time), prompts
  for an appropriate `--workers` value based on the number of suites and
  available CPUs, and installs `Parallel::ForkManager` automatically if
  it is not present. The `-y` flag skips all interactive prompts for
  automated deployments.

- `INSTALL.pl` now validates that Apache is configured correctly for ATM:
  warns if `mod_cgi` (or `mod_cgid`) is not enabled, with
  distro-specific instructions to enable it; warns if `mod_perl2` is
  active but Apache is not using the `prefork` MPM (required by
  mod_perl2), with fix instructions for Debian/Ubuntu and RHEL-family
  systems.

- ATM now gracefully handles missing `Parallel::ForkManager` by falling
  back to sequential session synchronization. Previously, a missing
  module caused a fatal startup error. `INSTALL.pl` and `UPGRADE.pl`
  will install `Parallel::ForkManager` automatically on new installs;
  existing installs that have not installed it will continue to work.

### Bug Fixes

- Web requests for a suite that is under maintenance (`updateSuite`,
  `updateSets`, or `syncSQL` running) now immediately return a "suite is
  locked" message instead of blocking. Previously, blocked web requests
  could exhaust the mod_perl worker pool and make the entire application
  unresponsive. Unrelated suites remain fully accessible while
  maintenance runs.

- Fixed a compatibility error with certain OS-packaged versions of
  `Apache2::SizeLimit` that caused every mod_perl request to fail with
  `Can't locate object method "get_check_interval"`. A startup-time shim
  now handles the missing method.

- Fixed a bug where test case UUIDs (`atm_id`) written during upgrade
  were not persisted to disk, causing `updateSets.pl` to re-process
  every test case in every session on every subsequent upgrade. On large
  installations (e.g. sessions with 20,000+ test cases), this could
  cause `updateSets.pl` to run for 30 minutes or more unnecessarily.
  Added `--skip-uuid-update` flag to `updateSets.pl` for cases where
  `updateSuite.pl` has already completed UUID assignment.

- Fixed sentinel key (`__dbm_imported__`) leaking into data iteration
  in FilterDB, SearchDB, ReportDB, AgentSet, ATMConfig, CacheDB,
  CacheFile, SuiteDB, Results, and Account.  This could cause errors
  when viewing reports or filters after migration.

- Fixed `compress()` return value not checked in SQLiteFile, which
  could silently produce corrupt data on out-of-memory conditions.

- Added 100 MB pre-compression size warning in SQLiteFile to catch
  unexpectedly large records before hitting SQLite blob limits.

- Increased the maximum length of the userlist column in SQL mirrored
  tables from 50 to 255 characters to accommodate longer user lists.

---

## 2.29.14

This is a minor bug fix release. Issues addressed in this release
include:

- In some circumstances a popup window from the report generation page
  would fail to be created.

- When using an ODBC connector if a field was longer than the limit
  imposed by the schema the data was not correctly truncated.

- If a SQL table used lowercase characters in its prefix,
  initialization of the database could fail with some connectors
  (e.g., ODBC with MS SQL Server).

---

## 2.29.13

This is a minor bug fix release. Issues addressed in this release
include:

- MS SQL integration could encounter issues when passing Unicode
  characters through the new DBD::ODBC module to versions of MS SQL
  later than 2018.

---

## 2.29.12

This is a minor bug fix release. Issues addressed in this release
include:

- Removed some module dependencies that were not required and could
  result in startup errors.

---

## 2.29.10

This is a minor enhancement release. Issues addressed in this release
include:

- Added some performance enhancements for mod_perl to speed up startup
  and conserve memory by pre-compiling many components.

- Added debugging output in the mod_perl handler if the Apache2
  modules fail to load.

---

## 2.29.09

This is a minor enhancement release. Issues addressed in this release
include:

- Added support for enabling per-request memory limits for Apache
  through a new memoryLimit variable. This is expressed in kbytes, so
  100 * 1024 would 100 megabytes. Apache processes with larger
  non-shared memory usage than this amount will be automatically
  recycled after the request completes.

---

## 2.29.08

This is a minor bug-fix release. The issue addressed in this release
is:

- The REST API should use an atm_id in a test session to look up the
  corresponding test case, not the id (path).

---

## 2.29.07

This is minor enhancement release. Issues addressed in this release
include:

- Added support for additional parameters to the getSessionResults RPC
  command.

---

## 2.29.06

This is minor enhancement release. Issues addressed in this release
include:

- Added support for a new getSessionResults RPC command.

---

## 2.29.05

This is a minor bug-fix release. Issues addressed in this release
include:

- Added tlsv1_2 and tlsv1_1 as additional options for LDAP secure
  connections.

- Added a returnJSON option to RPC commands

- Added a new getTestResultData command to RPC

---

## 2.29.04

This is a minor bug-fix release. Issues addressed in this release
include:

- Added tlsv1_2 and tlsv1_1 as options for LDAP secure connections.

- Added a returnJSON option to RPC commands

- Added a new getTestResultData command to RPC

---

## 2.29.03

This is a minor bug-fix release. Issues addressed in this release
include:

- Suppress warnings about Mail::Sender

- Fix an issue involving communication between child and parent
  windows when running tests and reporting.

- Improving the performance when creating test sets and sessions and
  selecting tests or requirements by name instead of by folder.

---

## 2.29.02

This is a minor bug-fix release. Issues addressed in this release
include:

- Fixing an issue where a variable was used and not declared in the
  compareSessions.mpl module [Issue #1937].

---

## 2.29.01

This is an enhancement release. The following minor features have been
added:

- New operations in the RPC.mpl interface.

- Added option to suppress test case folders names in some reports.

- Added example docker files to generate docker instances that support
  ApTest Manager.

- When defining a test set or session and selecting tests from a list,
  it is now possible to use the order in which the tests were selected
  as the order of tests in the resulting sessions.

- Added example installation scripts for popular LINUX distributions
  that can assist with getting the correct modules installed.

- Added an option to notify ONLY on test case deletion, instead of
  upon any test case modification.

- Added the 'updateOrderCache' script to help update the cache of
  ordered files in a suite from the command line.

**In addition, the following minor issues were addressed:**

- Tightened up the scanning for libraries in checkSetup.pl

- updated jira-rest example to help insulate from errors with JIRA
  configuration.

- If there was an error in a test case ID field, it could cause the
  generated JS for the folder and test case tree viewer to have a
  syntax error.

- An undefined field referenced when exporting to Excel could cause a
  RTE [Issue #1892].

- checkSetup.pl was getting confused by warnings from perl versions
  5.14 and later [Issue #1873].

- The runWholeSession module was incorrectly attempting to release the
  open TestSession object twice, resulting in a spurious message in
  the system log [Issue #1852].

---

## 2.28.04

This is a minor bug-fix release. Issues addressed in this release
include:

- Upgrading on Windows could run into a problem with dependency
  ordering when replacing some required Perl modules [Issue #1841].

- The Show Accounts page did not display the status of the account
  disabled field [Issue #1839].

- If a requirement was damaged and a test referenced that requirement
  and the test was in the trash and the trash was emptied, there was
  the possibility of a run time error.

- Restoring the user database or the configuration from a backup made
  from version 2.28.03 could fail if the data folder permissions were
  not correct.

---

## 2.28.03.01

This is a minor bug-fix release. Issues addressed in this release
include:

- On some older servers, a bug in perl 5.10 would cause local versions
  of modules to be ignored. Added instructions to the INSTALL.pl
  script for upgrading the core modules [Issue #1818].

- On some versions of Internet Explorer, creating sessions or editing
  session names would fail because of a JavaScript inconsistency
  [Issue #1820].

---

## 2.28.03

This is a minor bug-fix release. Issues addressed in this release
include:

- The export.pl utility was not detecting situations where the
  underlying system libraries could not successfully serialize a test
  session object. Added an option to the exportAll.pl script to select
  suites to export. This utility has better error recovery. The
  export.pl script will be removed from future releases [Issue #1788].

- The updateSets.pl script would incorrectly open a test session in
  write mode even when running with the -n "do nothing" option [Issue
  #1788].

- The updateSets.pl script now has an option to only update specific
  sets in a test suite (-s set1,set2...) to help speed the operation
  when specific sets / sessions need to be fixed on very large test
  suites [Issue #1788].

- The URI in use and parameters passed to it were not always included
  in generated error reports [Issue #1790].

- If folders within a folder had been specifically arranged, and then
  one of those folders was removed outside of ApTest Manager's GUI,
  the system could throw a warning during synchronization of the test
  suite [Issue #1795].

- Very very large test suites / collections of test suites were not
  backing up correctly and consequently would not restore correctly
  [Issue #1807].

- When configuring a SQL Datastore, if the encoding of the system is
  set to UTF-8 in config.pl, then use a default charset of utf8 for
  mysql [Issue #1807].

- It was not possible to require that a Test Session name /
  description was mandatory. This is now a global configuration option
  [Issue #1817].

---

## 2.28.02

This is a minor bug-fix release. Issues addressed in this release
include:

- Exporting test cases or requirements in raw mode could provide
  incorrect information about associated requirements (or tests) that
  would prevent correct re-import of the raw data [Issue #1755].

- If a test session had an old format folder name (e.g., 0058 instead
  of 000058) it was possible for the delete session operation to fail
  to remove the session from the Suite's cache [Issue #1777].

- Added a requirement for a more modern version of IO::Socket::SSL,
  because the system module Mail::Sender does not seem to specify a
  specific version even though it requires some methods to be exposed
  [Issue #1782].

---

## 2.28.01

This is a minor bug-fix release. Issues addressed in this release
include:

- When using Oracle as a SQL datastore, if there were fields that were
  very long and included UTF-8 characters, they were causing the
  corresponding Oracle field to overflow [Issue #1699].

- The resize grab handle was accidentally removed from the lower right
  corner of wysiwyg text areas [Issue #1714].

- When importing requirements and tests there was no way to update an
  existing requirement or test and have a history entry added
  automatically [Issue #1717].

- If a test or requirement name was longer than the testNameMax
  configuration parameter, SQL synchronization could fail because the
  atm_name field of a test case or requirement would be longer than
  the defined width [Issue #1719].

- Tightened up the ability to inject locally defined 'help' that will
  be included in the help panel. If there is a folder at the top level
  named localHelp and in that folder there is a file with the same
  name as the helpFile associated with a page (e.g.,
  changeAccounts.mpl for the page that allows the administrator to
  edit accounts) then the fragment will be injected into the help
  panel BEFORE the standard help but AFTER the generic help indicator
  [Issue #1720].

- When using the 'Import from Another Suite' operation, if an item
  being imported would result in a file name being too long, the
  import operation threw a run time error rather than reporting a
  warning [Issue #1727].

- The checkSessions.pl utility would complain about test sets where a
  test case entry had a well-formed atm_id but was missing its id
  entry. It should not have [Issue #1735].

- When assigning tests to testers, if multiple users made assignments
  at the same time, it was possible for one user's edits to overwrite
  another. Now the system will attempt to merge the edits. If the
  merge is not possible, it will warn the (later) user that there are
  conflicts and offer to let then override the previous changes or
  discard their own changes [Issue #1747].

- Deleting a test set from the top level set folder could cause the
  set to be copied into the deleted files tree in such a way that
  subsequent set deletions would fail [Issue #1749].

---

## 2.28.00.01

This is a patch release. The following issue was addressed:

- Saved session filters were mistakenly picking up a user's selected
  sessions from the checklist, resulting in a conflict between lists
  when generating reports [Issue #1706].

- On systems where auto-refresh of the Report and Run pages is
  disabled, changing to a different saved filter did not automatically
  reload the page [Issue #1706].

> **NOTE:** If you have already upgraded to version 2.28.00, you may
> install this upgrade by using the special -I flag to the UPGRADE.pl
> script (e.g., perl UPGRADE.pl -I). This will skip the test suite
> integrity checking, which can result in a MUCH faster upgrade for
> most users.

---

## 2.28

This is an enhancement release. The following major features have been
added:

- Upgraded to the latest release of TinyMCE - the wysiwyg editor.

- Updated an example 'jira-update' script. Improves integration with
  JIRA by adding the ability to incorporate JIRA issue status into a
  session execution field.

- Added a new 'jira-rest.mpl' integration module. This module relies
  upon the Atlassian REST plugin to interact with JIRA.

- You can now create public and private saved filters for the lists of
  sessions on the Run and Report screens. The system will
  automatically create a default filter for each user's saved filter
  settings (if any) when upgrading to this version [Issue #1435].

- There is now an option to generate a table that shows the breakdown
  of per-executed test results for each Requirement included in a
  Templated Requirements report [Issue #1669].

- Added an integration module for the Gemini issue tracking system
  [Issue #1689].

- Added the ability to reference the revision number of a test case or
  requirement when the modification history table feature is enabled.
  In order to use this feature you must add a field named "atm_revnum"
  to your test case / requirement fields. You can then reference this
  field in all the normal ways [Issue #1691].

- Added a "history" flag to Execution Fields. When this flag is set,
  values for this field will be available in a test case's execution
  history [Issue #1695].

**Some issues from earlier releases were also addressed:**

- The documentation was unclear about history field references in
  source control operations. Those references must be in upper case
  (e.g., %HIST_ATM_MCOMMENTS) [Issue #1677].

- If a Test Session was corrupt such that one or more tests in the
  session had no associated 'id' and no associated 'atm_id'
  checkSessions.pl would correctly report this as an error, but
  updateSets.pl would not correct this error. Moreover, attempting to
  synchronize the session with a SQL server could result in a SQL
  error because the atm_id field (a key field) was empty [Issue
  #1680].

- Importing files to a Windows Server from IE9 could result in a
  runtime error when attempting to decode the Byte Order Mark embedded
  in the file [Issue #1681].

- When passwords had been encrypted, and then the global encryption
  option was disabled, changing a password resulted in the user no
  longer being able to login [Issue #1688].

- The table of problem report counts in the Progress Report could
  become garbled when there is a default value pattern for the
  atm_prid execution field in a test suite.

---

## 2.27.04

This is a minor bug-fix release. Issues addressed in this release
include:

- It is now possible to delete a defined LDAP server from the LDAP
  management page [Issue #1663].

- The Export Tests feature allowed the select of the execution
  history, but that field is not exportable [Issue #1666].

- The notes field of JSON formatted results sent to the RPC mechanism
  were not being correctly processed [Issue #1668].

- The RPC method getTestUUID did not handle tests that use outline
  numbering correctly [Issue #1673].

- When reports were exported in CSV format, some fields still
  contained raw HTML instead of formatted text [Issue #1675].

- During import of tests and requirements, you can now specify that
  the content of textarea fields should be converted to Markup for use
  in WYSIWYG fields. [Issue #1676].

- Changed the legal collection of characters to omit commas. This
  resolves the issue with bulk set / session refreshing and helps
  avoid other issues related to commas that get passed in URIs for
  other bulk operations [Issue #1678].

- If a renumber test suite operation were interrupted, the resulting
  files in the file system could have names that did not match the
  expected pattern for recovery [Issue #1679].

- If there was corruption in the user-defined list of ordered files in
  a folder, the Ordered.pm library would throw a warning during the
  UPGRADE.pl process [Issue #1690].

---

## 2.27.03.01

This is a patch release that invalidates the previous release. Issues
addressed in the release include:

- If there were no sub-folders in the test set tree for a test suite,
  the test set display would appear to hang (spinning wheel) and it
  was impossible to create new sets [Issue #1667].

In addition, an example script has been added that will allow
importing results via a CSV file using the RPC mechanism so that it
can be run on a remote machine.

---

## 2.27.03

This is a minor bug-fix release. Issues addressed in this release
include:

- Exporting session results as CSV would never include the value for
  the ID field [Issue #1649].

- RPC getTestCaseResult was returning an incorrect result if the test
  case name or UUID matched test item 0 of the session [Issue #1652].

- Placing a parenthesis in a Test Set Group name or a Test Set name
  could cause it to not display correctly and cause other behavioral
  problems [Issue #1645].

- In some versions of Internet Explorer, a correctly formed size
  attribute for a history or execution history test case field in the
  test case field editor would indicate that it the height could not
  be zero [Issue #1654].

- Importing results from a CSV file via the GUI did not correctly
  update the test suite meta data in all cases. This could result in
  the progress of the test session not being correctly reported on the
  main Run Sessions page [Issue #1658].

- It was possible for folder names to be displayed incorrectly in the
  Edit Tests and Edit Requirements views if the names used non-ASCII
  characters and the encoding was set to UTF-8 [Issue #1659].

- Performance of graphing modules was unnecessarily slow when runnning
  under mod_perl [Issue #1659].

- Notification messages were being sent to disabled accounts [Issue
  #1662].

---

## 2.27.02

This is a minor bug-fix release. Issues addressed in this release
include:

- An earlier fix for an issue with cleaning up user data was not
  merged into the main tree [Issue #1609].

- If there were certain types of cache damage in a test suite, the
  "Clean up Hidden, Deleted Files" operation could fail to execute
  completely. [Issue #1626]

- It is now possible to require that users have a unique e-mail
  address. [Issue #1637]

- In certain circumstances, it was possible for non-ASCII folder names
  to be displayed incorrectly in the folder list. [Issue #1646]

- Headers in some tables in requirements reports were changed to make
  it clearer exactly what the data refers to.

- Under a very rare circumstance the data manager could attempt to
  access a datafile that was already closed, resulting in a run time
  error.

---

## 2.27.01

This is a minor bug-fix release. Issues addressed in this release
include:

- If a test suite had no sub folders, the folder tree loading
  indicator would continue to 'spin' after the data was loaded. [Issue
  #1630]

- Administrators can now force a user to change their password on
  their next login [Issue #1624].

---

## 2.27

This is an enhancement release. The following major features have been
added:

- ApTest Manager will now automatically track the execution history of
  each test case. You can display this information in each test when
  viewing and editing, and can also embed the information in reports.
  See the Admin Guide for more information on 'atm_runhistory'. [Issue
  #1333]

- The folder tree list will now show the count of the requirements or
  test cases in the folder and the folders below it. [Issue #1543]

- Certain "High Level" test suite operations can now be limited to
  administrator-class users only. [Issue #1593]

- Added integrity checking to checkSessions.pl so it ALSO checks the
  associated test sets and checks to ensure that there are no extra
  test sessions defined in the system cache. [Issue #1597]

- Added use of jQuery and jsTree for folder tree displays on Tests /
  Requirements and Test Sets to improve performance when there are
  many thousands of folders. [Issue #1600]

- Requirements reports can now include a summary line that reflects
  the percentage of requirements in the report that have associated
  tests. [Issue #1601]

- It should be possible to manage an independent collection of session
  variables outside of the 'main' collection. You can now define a
  VARIABLES.local file for any test suite and those variables will be
  integrated with the main collection of variables. [Issue #1617]

- When creating a new account and when modifying an existing non-LDAP
  account, it is possible to require that the user change their
  password on their next login.

**Some issues from earlier releases were also addressed:**

- If a user chose a non-standard landing page it was possible for the
  user's test suite selection to not be remembered so that the next
  time the user accessed the system they would be placed in a
  different test suite by default. [Issue #1583]

- Previewing a test suite profile template that referenced result data
  would result in a Run Time Error. [Issue #1612]

- If a status report has CSV output selected and session variables are
  included, the report would error off. [Issue #1616]

- Multi-select session variables were not being emitted correctly when
  exporting sessions or when calling the generateVarXML method. [Issue
  #1618]

- When a session variable was a multi-select list, filtering in the
  run and reporting screens would only work if multiple values were
  selected in the filter. [Issue #1623]

---

## 2.26.03.01

This is an emergency patch release to fix a regression in 2.26.03:

- When editing multiple requirements, field references were not being
  expanded. [Issue #1606]

---

## 2.26.03

This is a minor bug-fix release. Issues addressed in this release
include:

- Submitting results via rpc.mpl failed with a run time error. [Issue
  #1584]

- There were some inefficiencies in user permission updating that
  could make changing permissions at installations with MANY MANY
  users and MANY MANY test suites take a long time (and potentially
  deadlock). [Issue #1585]

- Substantial corruption in the user database could exacerbate
  performance issues. [Issue #1586]

- Editing the execution fields or session variables of a test suite
  profile could result in a run time error. [Issue #1587]

- Creating multiple test sessions in the Administer Sets and Sessions
  interface was ignoring the session variable settings of sets after
  the first one. [Issue #1589]

- When changing assignments via RPC, the assignment meta-data was not
  updated for the test session. [Issue #1590]

- Importing results did not update the session meta data cache when
  the session results or assignments were updated. [Issue #1591]

- If a folder, test case, test set, or requirement had a '#', '?',
  '+', or other reserved characters in its name certain operations
  would fail. [Issues #1595, #1599]

---

## 2.26.02

This is a minor bug-fix release. Issues addressed in this release
include:

- If there was a cache inconsistency in the structure of a test set
  such that the list of sessions was inaccurate, the Delete Set
  operation could throw a run time error.

- The debug logging level of the ATMHandler initialized and using
  compression messages was set to 1 - changed it to 3 so it does not
  introduce messages into the logfile that appear to be errors.

- Added a 'skip' parameter to checkSetup.pl - if set, then permission
  checking and test suite integrity checking will be skipped to speed
  up execution.

- A required module was not being included by the import results
  component. This could result in a run time error.

- Included an example Integration Module for redmine. [Issue #1529]

- On systems with versions of Perl < 5.8.9 upgrading could fail if
  there were more than 1000 test sessions in a test suite. [Issue
  #1551]

- If there is cache corruption in the suite database it was possible
  to get a run time error when on the run and report selection pages.
  [Issue #1552]

- It was possible for the progress meters to show 100% when the
  session was not actually quite complete. [Issue #1559]

- The Select Report page did not show the filter that permitted
  selecting by session number. [Issue #1560]

- The Result Code editor showed an incorrect context-help file. [Issue
  #1565]

- The search/replace functionality in the edit test case area was
  incorrectly referencing the change history table. [Issue #1568]

- The session summary report was unable to expand arbitrary test case
  fields. [Issue #1568]

- The exportSuite.pl script reported an error when completing its
  export. [Issue #1575]

- Test Case and Requirement names should not have permitted quotation
  marks, ampersands, nor percents. [Issue #1577]

---

## 2.26.01

This is a minor bug-fix release. Issues addressed in this release
include:

- If there were execution fields that were not included in the run
  template, any data in those fields was removed each time a test run
  run using that run template, even if the value was marked readonly.
  [Issue #1474]

- A test case report that did not require results would display
  columns for results and notes when 'step-by-step' mode was used for
  a test procedure. [Issue #1526]

- It was not possible to copy *only* the access permissions from one
  test suite to another. You can now do this through the copySuite.pl
  command line operation and through the "Change Test Suite Access"
  item within "Manage Test Suite". [Issue #1531]

- When a session had been completed, and then it was refreshed in such
  a way new tests were added, the end date was not cleared. When the
  session was subsequently completed again it would not reset the end
  date nor resend notifications. [Issue #1534]

- The Progress Report did not include user-selected test case details
  fields when customized to emit CSV. [Issue #1536]

- It is possible to add ApTest Home Menu and Navigation items as a way
  to extend the system. These extensions were not showing up in the
  list of available start pages for the system wide default nor for
  individual user choices. [Issue #1537]

- Exporting Session Results did not include session variables. There
  is now an option to include session variables in the output. [Issue
  #1538]

- On perl 5.8.8 and earlier a bug in the File::Glob module could cause
  the system to incorrectly calculate the highest numbered Test
  Session, and thus result in a corrupt '.nextid' file for Test
  Sessions. [Issue #1542].

- If the system somehow had a corrupt '.nextid' file for Test Session
  Creation, it was possible for the system to create multiple sessions
  with the same identifier but with different folder names. [Issue
  #1542]

- Multi-edit of test cases was displaying field names instead of field
  contents. [Issue #1544]

- Generating a Test Case report with no results could cause a runtime
  error about a bad call to generateMarkUp. [Issue #1548]

- Exporting to XLS could fail if a menu-style field had more than 255
  characters of data and data validation was enabled. [Issue #1549]

---

## 2.26.00

IMPORTANT UPGRADE INSTRUCTIONS

Because of a bug in a (much) earlier release of ApTest Manager, it is
possible that some old Test Sessions may be missing information that
connects the test results to their test cases. When performing this
upgrade, the system will check for this corruption and report it to
you. If you see reports about this issue while performing an upgrade,
you can re-run the UPGRADE.pl script with the '-P' option to
automatically prune the data or with the '-I' option to skip integrity
checking (and therefore not repair the issue, but complete the
upgrade).

This is an enhancement release. The following major features have been
added:

- To improve performance, switched into 'static source' mode. If you
  are making any local changes to your source code, see the config.pl
  file section on 'Development control' for information on how to
  force those changes to be visible.

- It is now possible to enable automatic updating of some screens (Run
  Sessions, Select Report). There is a system wide control for this,
  and an individual preference as well. Note that enabling this
  feature will 1) place a small extra load on the server, and 2) will
  mean that users on any of these screens who have the preference
  enabled will remain logged in and using a license as long as one of
  their auto-refreshing screens is displayed.

- Changed the rules for Requirements and Test Case folder and file
  names to permit a broader collection of characters.

- There is now an administrative option to allow dates and times to be
  displayed using the historical rules (legacy behavior), using an
  administrator-defined 'locale', or using a user-defined 'locale'
  falling back to an administrator-defined default.

- Export Tests and Requirements now allow arbitrary ordering of fields
  in the exported data, and remember your field choices and order to
  make repeating exports easier.

- Added a command line tool to copy a test suite (bin/copySuite.pl).

- You can now attach files to results in sessions via the RPC
  interface [Issue #1424].

- Changed the Test Set administration interface so that controls for
  set management are all on the set group display page instead of in a
  sub-menu [Issue #1445].

- Added the ability to renumber tests or requirements within a folder
  when using autonumber-by-folder mode for naming [Issue #1455].

- Added a getSuiteList method to the rpc system [Issue #1468].

- Added code to the various import tools that will handle two
  edge-cases. First, if the input 'CSV' file is tab-separated instead
  of comma separated, the system will silently permit this. Second, if
  the input file is in an encoding that does match the system-defined
  encoding (or UTF-8 if there is no system-defined encoding) then the
  input file will be automatically converted to the system-defined
  encoding [Issue #1470].

- Some elements of the API documentation were not being published due
  to the depth of their structure.

- If you provide a 'locallogo.png' file in the images directory, your
  logo will now be used everywhere the default ApTest Manager logo
  appears.

- Increased the maximum number of test sessions supported to 1,000,000
  and changed the directory structure so that there are never more
  than 1000 test sessions per folder to work around a limitation on
  some Unix file systems [Issue #1475].

- Added an option to set a banner that can display on every page if
  system administrator configures one [Issue #1480].

- Added ability to export in Excel format [Issue #1483].

- Added ability to import from Excel [Issue #1484].

- Added ability to import and export data to/from multiple sessions in
  a single file [Issue #1485].

- Added more session details to the getSessionDetails rpc interface.

This release also addressed a number of reported issues:

- When creating multiple sessions it was possible for the default
  settings from the set[s] to be ignored.

- Changed the logic used when creating zip files for backups to work
  around some memory / disk space problems [Issue #1422].

- If there were many many changes to the values for sets, the
  setSelectors.mpl script could cause the server to throw a URI too
  long error. Also the advanced search / simple search switch did not
  work correctly [Issue #1486].

- If a different Perl interpreter is selected when running the
  UPGRADE.pl script from the one originall used, the system will have
  trouble resolving all the modules. Added a warning to force the
  administrator to do a reinstall if they are changing perls [Issue
  #1494].

- Test Cases listed in the detail section of requirement reports were
  listed in an apparently random order, instead of in test suite order
  [Issue #1513].

- Several tools in the 'bin' directory that create temporary files
  were not creating those files in the ApTest Manager 'tmp' area. Note
  that this can be overridden via the 'TMPDIR' environment variable if
  you really want temp files to be elsewhere on the file system [Issue
  #1517].

- Exporting CSV formatted test cases incorrectly included the UUID of
  associated requirements instead of their display ID. This in turn
  made it impossible to re-import the test cases with their links to
  requiements intact [Issue #1520].

---

## 2.25.01.03

This is a minor bug-fix release (unless you use SQL integration - then
it is a major bug fix release). Issues addressed in this release
include:

- Version 2.25 introduced SQL connection pooling. The changes related
  to this resulted in run time errors when used in conjunction with
  some versions of some database drivers (notably MySQL reporting that
  the DBD module does not implement the AutoCommit attribute). The
  root cause of this problem was that some objects thought a
  conneciton was still open when it had in fact been closed. This has
  been corrected [Issue #1465].

- Added code in bin/checkSessions.pl to examine test sessions for
  possible data structure damage as a result of a missing 'atm_id'
  [Issue #1459].

- If a test session had a corrupt entry such that a test had no UUID
  then it was possible for the ID field of that test to get populaed
  with the entire collection of UUID to ID mappings [Issue #1459].

- When using the importFromCSV script and supplying a field that
  contains usernames, if a user was defined with any uppercase
  letters, they would not match [Issue #1462].

- When using the importFromCSV script to update an existing
  requirement that had no associated test cases, the script would
  error out [Issue #1457].

- When using 'simple' search, certain reports would throw a run-time
  error [Issue #1467].

---

## 2.25.01.02

This is a minor bug-fix release. Issues addressed in this release
include:

- Added some documentation about how to configure under IIS 7.

- Clarified Strawberry Perl requirements for Windows users.

- If a field was referenced in a test case and a user was editing that
  test case, but at the same time the field definition was removed by
  another user, the saveTestCase.mpl module would throw a run time
  error [Issue #1441].

- There were no examples about how to integrate with Subversion in the
  configuration file [Issue #1443].

- The SQL Session Data tables were incorrectly leaving out some fields
  [Issue #1454].

---

## 2.25.01.01

This is a bug-fix release. Issues addressed in this release include:

- When synchronizing the SQL store, it was possible that multi-select
  fields that are in tables would be put into an incorrect SQL
  database table / field. In addition, the length of SQL fields
  related to test case or requirement names was declared 4 characters
  shorter than it should have been (to account for suffixes) [Issue
  #1444].

---

## 2.25.01

This is a bug-fix release. Issues addressed in this release include:

- The code for updating cookies in customizeReport could throw an
  error if there was a comma in an existing cookie saved in a user
  session preference.

- It was not possible to create a session "unaffiliated" with a test
  set when using makeSession.pl or when using rpc.mpl.

- The INSTALL.pl script was incorrect retrieving PPM files from the
  version 2.24 PPM repository when installing on Windows platforms
  under ActivePerl. It now accesses the ApTest repository for version
  2.25.

- The code for generating dynamic SQL queries was not correctly
  searching for UUID patterns to define collections of tests. THIS
  CODE IS STILL EXPERIMENTAL.

- There was no way to retrieve the list of test sets and test sessions
  via RPC (Issue #1436).

- If a session were somehow removed and still displayed in the user
  interface, some operations (e.g., delete session) might throw a run
  time error. Also, the associated set was not being correctly updated
  when multiple sessions were deleted (Issue #1439).

---

## 2.25.00.01

This is a bug-fix release. Issues addressed in this release include:

- The 'simple search' operation did not show its selection options in
  the Test Set definition and Test Set management pages [Issue #1430].

- In the 'advanced search' mode of Test Set definition and changes the
  ID field defaulted to 'Select from list' instead of 'Select by
  Folder & Name' [Issue #1430].

- When modifying an existing test set, the ID selection field was
  being incorrectly set to 'Select from list' when it was actually
  configured to 'Select by Folder & Name' [Issue #1430].

---

## 2.25.00

This is an enhancement release. The following major features have been
added:

- The 'deleted files' repository for each test suite is now located in
  a subdirectory called '.x.dir', not '.Deleted_Files.dir'.
  Directories created within this folder are now numbered starting at
  1 (e.g., '1.dir'). This is to help alleviate an issue with long path
  names on systems that do not support long path names (Windows)
  [Issue #1252].

- Added another permission level that allows users to manage sessions
  without being able to manage sets [Issue #1296].

- There are now administrative options that allow the easy use of HTTP
  Basic Authentication to identify users [Issue #1364].

- You can now import uploaded files from another suite as part of the
  import from another suite operation [Issue #1369].

- You can now do bulk-creation of test sessions against multiple test
  sets within a folder [Issue #1308].

- You can specify the default landing page for users who have not set
  their own. The 'default' default remains the simple menu of
  operations. We suggest setting it to the Execute Tests page, as that
  is the most intuitive dashboard page.

- There is now an example issue tracking integration module for Trac.

- Re-enabled row higlighting when selecting rows of tables with
  checkboxes [Issue #1388].

- The progress report can now show detail ONLY for tests where the
  results are the same in all sessions included in the report.

This release also addressed a number of reported issues:

- There was a slim possibility that when long running operations were
  going on, a test case save in the same test suite would result in a
  run-time error. This risk has been reduced. The user can always
  press 'back' and attempt the save again should such an error pop-up
  [Issue #1257].

- Some users have reported that when renumbering test cases or
  requirements if the operation is interrupted tests / requirements
  seem to disappear. Added logic to the synchronize operation to look
  for files that are remnants of renumber operations and reconnect
  them to the tree automatically [Issue #1363].

- When exporting tests or requirements in 'raw' csv mode, table field
  columns were not correctly emitted. The table is now expanded into
  its columns and each row is emitted as a separate row in the CSV
  file [Issue #1374].

- When editing a test case from the Run Test Case page, the mandatory
  field handling code was broken in Internet Explorer due to a
  JavaScript typo [Issue #1376].

- When toggling the 'show all' option on the Select Reports page, the
  option could get 'stuck' and would not be overridden when defining
  new filters [Issue #1377].

- The link to the image for locked folders was incorrect in the Edit
  tests and Edit Requirements views [Issue #1379].

- When generating CSV output for the Status Report, result fields that
  are marked as excluded were INCLUDED in the counts by mistake [Issue
  #1381].

- In certain situations IE8 would refuse to render a perfectly valid
  page when Arabic text is embedded with non-Arabic text in a line
  followed by a line break and then followed by a digit [Issue #1383].

- When a Test Set folder was renamed or copied, the description for
  that folder would get lost or not copied [Issue #1387].

- Requirement fields of type checkbox had an automatic default of the
  first value in the list AND were unable to be multi-select [Issue
  #1392].

- Importing tests or requirements required the use of the translated
  values of list fields, rather than the descriptions. This had a
  consequence of preventing the use of time notations like 1d or 0.5h
  if those were used in the definition of a time field [Issue #1393].

- Importing results into a session from a CSV file did not update the
  cached impression of result counts [Issue #1394].

- Allow a set parameter to be passed to runSessions.mpl to control
  specifically what set (and therefore sessions) are displayed.

- Corrected a situation where the SuiteDB data was not being captured
  in read mode at the start of processing if the Suite object was
  opened in write mode [Issue #1399].

- Optimized loading of execution field definitions during Suite object
  creation to relieve load on the SuiteDB object [Issue #1399].

- Changed the way SQL connections are handled so that each process
  never has more than a single connection to a SQL store for each test
  suite to avoid a potential deadlock with some SQL databases [Issue
  #1399].

- In IE7 the list of folder controls did not display correctly when
  managing a test set folder [Issue #1403].

- When an imported results CSV file dod not quote data and had extra
  white-space around commas, the data was not always parsed correctly
  [Issue #1404].

- If a Test Set used a regular expression to select tests, creating a
  session would throw a run time error [Issue #1410].

- When there were many many requirements in a folder, the popup list
  of requirements too took long to display [Issue #1415].

- When editing a test case or requirement by clicking the 'Edit'
  button while viewing the item, uploads of attachments would be put
  in the top level folder instead of the current folder [Issue #1426].

- Step-by-step result recording was not being correctly captured in
  the associated SQL store [Issue #1429].

---

## 2.24.02.02

This is a bug-fix release. Issues addressed in this release include:

- When session execution is complete and you click the close window
  button, but the parent window had already been closed, and you are
  using Internet Explorer, IE will throw a JavaScript error. [Issue
  #1367]

- When selecting tests via search or creating a test set, if you
  select by folder AND only a single other field, that single other
  field was ignored for selection purposes. [Issue #1368]

- In modern versions of Firefox and Opera the wysiwyg editor did not
  correctly insert ApTest Manager fields from the selectable popups.
  [Issue #1386]

---

## 2.24.02.01

This is an emergency patch release, but also includes some minor
bug-fixes. Items in this release include:

- When creating a new test set and selecting tests based ONLY upon
  their folder name, it was possible for the set to be corrupted in
  such a way that new sessions created from the set would have bogus
  test case IDs for their tests. Refreshing the session would resolve
  this problem. [Issue #1361]

---

## 2.24.02

This is a minor bug-fix release. Issues addressed in this release
include:

- There was a potential issue with checking for Suite-level locks that
  could cause a failure when running under mod_perl.

- The checkSetup.pl script now is more agressive about reporting
  progress while it is running [Issue #1286].

- When editing Session Variables, if a variable is of type date and a
  default value is set, the calendar popup did not close correctly
  [Issue #1310].

- When doing a search on a multi-select field that is in a table, if
  any table row had more than one value selected, the search would not
  correctly match one or more of the values [Issue #1341].

- When the trash was emptied, the tests or requirements thus removed
  were still being counted as present in the test suite [Issue #1342].

- Added a way to save a test case / requirement and create another new
  one quickly [Issue #1344].

- If there were errors in the structure of any Test Sessions, it was
  possible for the exportAll.pl script to include 'dbm' files in the
  zip file. exportAll.pl now attempts to serialize these manually if
  the automatic process fails [Issue #1346].

- The template editor appeared to fail on recent versions of Firefox
  because they fixed a bug we were counting on [Issue #1348].

- Added comments to make it clear that some sourceControl operations
  are REQUIRED or their corresponding operations will be disabled
  [Issue #1349].

- There were some inefficiencies in test case and requirement
  searching that caused performance to be MUCH worse than expected
  when there were a vary large number of test cases [Issue #1353].

- If the 'notes' execution field was marked as mandatory, the system
  did not enforce it [Issue #1355].

- In Internet Explorer an empty Test Set folder would throw a
  JavaScript runtime error [Issue #1356].

- In Internet Explorer, when searching test cases, if there were no
  requirements enabled in the test suite, date fields would throw a
  JavaScript runtime error [Issue #1358].

---

## 2.24.01.01

This is an emergency patch release, but also includes some minor
bug-fixes. Items in this release include:

- Added a JIRA client example that uses SOAP to support Unicode
  better.

- An image was omitted from the last release but was referenced by
  some help pages and by the IE6 integration support code.

- Added configuration option to control running multiple tests at a
  time - defaults to allowing this [Issue 1314].

- Added display of the count of tests / requirements in a folder
  [Issue #1292].

- Test case field searches were missing some selection attributes
  [Issue #1340].

- Import tests / requirements into the top level folder was putting
  the new items into a hidden folder [Issue #1340].

---

## 2.24.01

This is a minor bug-fix release. Issues addressed in this release
include:

- Removed unused images from the images directory to speed cache
  refreshes.

- The ApTest_A test suite profile had a typo in its Run Many template
  that caused a layout problem.

- The 'locked' test session / test set icon was missing from the
  distribution.

- The default sort order on the Test Suite selection page and the
  Account display page was backwards.

- The "LDAP" and "Admin" columns on the Show Accounts page were
  swapped [Issue 1329].

- When updating the colors in templates while upgrading to version
  2.24, it was possible for some templates to end up with a bad
  pattern in them which would result in them being uneditable [Issue
  1334].

- When a user selected the "Search" button in the Edit Requirements
  area, there was a javascript error [Issue 1335].

- Changed install/upgrade so that test suite profiles get colors
  updated to 2.24 scheme if use selects that [Issue 1336].

- The find/replace page threw a javascript error on IE7 and IE8 in
  both tests and requirements [Issue 1337].

- When editing fields in test suite profiles, incorrect warnings were
  displayed when fields are deleted or renamed [Issue 1338].

---

## 2.24.00

This is an enhancement release. The following major features have been
added:

- The look and feel has been completely re-done. Note that this has
  resulted in some incompatibilities with Internet Explorer version 6.
  We are working hard to address these, and will put out a patch
  release to support IE6 as soon as possible.

- The main datafile interface has been changed from the Perl DB_File
  module to the Perl BerkeleyDB::Hash module. This change has no
  effect on data, but it does improve support into more modern
  versions of Perl on Windows platforms [Issue 1189].

- A few Perl modules ApTest Manager relied upon were unavailable in
  Strawberry Perl 5.12. We have replaced those modules with similar
  ones that are available [Issue 1189].

- ApTest Manager now works with Strawberry Perl 5.12 on Windows
  platforms, in addition to continuing to support ActivePerl 5.8 for
  existing users. New Windows deployments should always use Strawberry
  Perl [Issue 1189].

- Users can now specify a default start page.

- The rpc mechanism can now be used to commit multiple test results
  into a session with a single call [Issue 1221].

- A number of additional methods were added to expose more test suite
  details via the rpc mechanism [Issue 1222].

- It is possible to use the renameUser.pl script to change a user's
  LDAP server [Issue 1234].

- When defining a SQL connection for a test suite (or globally) you
  can now specify additional table creation options (e.g., to use a
  specific database engine in MySQL) [Issue 1254].

- When creating an ad hoc test session from the Edit Tests or Edit
  Requirements area, you can now specify the schedule and session
  variables for the new session [Issue 1321].

This release also addressed a number of reported issues:

- The INSTALL.pl script checks to see if local modifications have been
  made to any of the provided scripts, but the logic for this was such
  that it might think changes were made when they had not been.

- When selecting multiple checkbox items in a table, if the table had
  another table embedded within it, not all checkboxes would be
  selected or cleared when clicking the 'select all' or 'clear all'
  button [Issue 1261].

- The SQL integration support did not accurately take into account the
  length of 'index' identifiers when determining if the created
  database and tables would fit within the restrictions of the chosen
  database engine [Issue 1270].

- Import from another Suite did not include the javascript component
  that enabled selecting test cases from a list [Issue 1273].

- Exported archives did not contain the LDAP server configurations
  [Issue 1276].

- If source control is enabled, exporting a test suite can result in a
  new repository being created [Issue 1279].

- Oracle supports large data fields, but the Perl driver for this does
  not work correctly so initialization could fail [Issue 1282].

- When renaming a test case, the automatically generated change
  history entry did not contain the old name of the test case [Issue
  1287].

- When a new user is created, an email was not being sent to that user
  to inform them [Issue 1288].

- When a test case execution time field was set to be an automatic
  timer, and there was a submission error (e.g., a missing result on
  the execution page, or a missing mandatory field) the form might
  still end up getting submitted [Issue 1289].

- When performing a find/replace on a field that is also a namepart.
  the cached versions of the test case or requirements names would not
  get updated [Issue 1293].

- If an ApTest Manager field had data that was longer than it should
  be it was possible for SQL synchronization to fail because the data
  would not fit in the SQL field [Issue 1299].

- The colorPicker for the Result Code editor had been mistakenly
  removed from the distribution, causing the editor to not display
  correctly [Issue 1303].

- When executing a test case, if the test case was locked, it was
  still possible to access the edit test case page [Issue 1305].

- When using renameUser.pl, data in history tables was not being
  updated correctly [Issue 1309].

- If a field of type uuid (atm_id, req_id) was included in a template,
  the value of that field might be updated when saving a test case or
  requirement [Issue 1312].

- When using step-by-step testing where there is a single step in a
  test, and using 'run many' mode, it was possible for a change in the
  result of the single step to NOT cause the changes for that test
  case to be recorded [Issue 1313].

- The documentation about how to locate ApTest Manager outside of
  Apache's DocumentRoot was lacking [Issue 1315].

---

## 2.23.03

This is a minor bug-fix release. Issues addressed in this release
include:

- If a the definition of a table field or history table field had a
  list of field names that ended in a comma, the last field would not
  be interpreted correctly [Issue 1244].

- If a VALUE was provided for am atm_prid Test Case or Requirement
  field, that VALUE was populated in test cases and requiremnts by
  default [Issue 1245].

- If a user's full name had a comma in it, the Progress Report was
  splitting the name on that comma and reporting statistics about the
  user twice in tables about execution results [Issue 1248].

- When running importFromCSV with the -n option (do nothing), the
  program errored because it tried to call the UUID method on a handle
  that was not defined [Issue 1250].

- When importTests.pl is called with a -C or -A option and a test case
  referenced in the CSV file was not in the test suite, the system was
  mistakenly including the test case in the Session anyway [Issue
  1251].

- When test cases or requirements are ordered manually and do NOT use
  outline or automatic numbering, client-side sorting of the test case
  or requirement table would sort alphabetically on the ID column
  rather than sort into the manually defined order [Issue 1256].

- When performing a global replace operation on Test Cases or
  Requirements, change history table information that was entered
  before previewing results of the replacement would be lost [Issue
  1260].

- If the option that permits case insensitive user names was enabled,
  the system mistakenly created new account records for each different
  username that a user attempted (e.g., user and USER). This then
  caused some operations like preference setting to not work
  correctly. NOTE - if you had this option set, you should use the
  Show Accounts operation to detect duplicate accounts and delete them
  [Issue 1262].

- In the Mantis integration module, the assigned user hash was being
  presented in an effectively random order, and it included a bogus
  blank entry (to get a real blank entry, the flag includeNotSet
  should be true in the call to the menu operation) [Issue 1265].

- On some screens that have lists with checkboxes and a 'select all'
  checkbox at the top, clicking the 'select all' box would not select
  the last item if the table header had subheadings [Issue 1266].

---

## 2.23.02

This is a minor bug-fix release. Issues addressed in this release
include:

- If someone manually created a directory on the server within the
  SETS hierarchy of a test suite, and placed one or more test sets
  within that directory (either manually, or because the folder had
  started out as a real Test Set group, and then been renamed on the
  server manually), synchronization of the test suite would fail
  because the libraries were unable to find the sets [Issue 1237].

- An update to the way suites are locked when synchronizing caused
  exportAll.pl to fail [Issue 1238].

---

## 2.23.01

This is a minor bug-fix release. Issues addressed in this release
include:

- Version 2.23.00 added support for multiple LDAP servers, but the
  release notes failed to mention this.

- When upgrading to 2.23.00 existing LDAP users continued to work
  fine, but some administrative screens did not correctly show that
  the users were LDAP-based [Issue 1233].

- The Show Accounts and Change Accounts pages did not indicate which
  LDAP server a user was associated with when there are multiple LDAP
  servers defined.

---

## 2.23.00

This is an enhancement release. The following major features have been
added:

- The WYSIWYG editors now work in Opera.

- When logged in, the test suite name is now a 'clickable' link back
  to the top level menu of the test suite.

- When using management scripts, the suite lock is now set whenever
  needed.

- It is possible to configure ATM so that login name lookups are case
  insensitive.

- Added an option to disable notifications to users when they perform
  the operation that caused the notification to be sent [Issue 1186].

- Added methods to dependsOn.js to make it easier to enable / disable
  whether a field is mandatory at runtime [Issue 1211].

- Added an optional mechanism through which users with Suite Manager
  level access can change the access level of other users [Issue
  1213].

- When there is a series of checkboxes, it is now possible to use
  shift-click to extend your selection [Issue 1216].

- There is now an option to include a table with a breakdown of
  information about values from the 'atm_prid' Execution field in the
  Progress report [Issue 1223].

- When working with Oracle 11g, data tables failed to initialize
  [Issue 1230].

This release also addressed a number of reported issues:

- When a suite object is created, the suiteDB is opened and all of the
  cached data is loaded into the object. The suiteDB is then released
  but the handle data was not cleaned up correctly. This could cause
  random-appearing cache consistency issues because the suiteDB
  information was not being updated [Issues 1161, 1167, 1201].

- When searching requirements, searching in a subfolder would match
  items in the parent folder as well [Issue 1203].

- If a test case or requirement field were not included in their
  respective editing templates, and the field was not marked
  'readonly', any value(s) in that field would be cleared when the
  test case or requirement was edited and saved [Issue 1204].

- When generating a requirements report from the Edit Requirements
  area, some graphs would not display correctly [Issue 1207].

- When graphing data from a history table, only the most recent value
  should be used [Issue 1207].

- When upgrading between releases that change the structure of the
  user database, it was possible for an error to arise in the SQL
  synchronization [Issue 1212].

- In Requirements, if an atm_prid field was defined, the default value
  pattern was not being correctly used to create links from the issue
  names into the associated issue tracking system [Issue 1217].

- If a history table definition was damaged such that it referenced a
  non-existent field, the multi-test and multi-requirement editors
  would throw a run time error [Issue 1219].

- When a templated test case report is being grouped by results, only
  some result fields were available [Issue 1224].

---

## 2.22.03

This is a minor bug-fix release. Issues addressed in this release
include:

- Added information about failed read and write locks so it will be
  easier to determine what resource is hard to obtain [Issue 4].

- Ensure that the suite cache is updated when a test set's data is
  changed [Issue 1162].

- Added a note that if you are using search and replace on a field in
  a table, commas must be escaped [Issue 1165].

- When doing a find/replace, using modification history tables, having
  the fields of the modification history table NOT be mandatory, and
  not providing any history data, the list of previous modification
  dates and users would be replaced with a single entry reflecting the
  current change [Issue 1177].

- If data fields had commas embedded within them (e.g., if a user's
  full name had a comma in it) the labels in some graphs could get
  confused [Issue 1179].

- Test cases with names that end in *req were getting incorrectly
  processed during synchronization. This would cause many side
  effects, including the name of the test case not showing up when
  viewing the folder, and some reports running very slowly because the
  cache of ordered test cases was constantly being re-evaluated [Issue
  1181].

- Creating a new requirement always marked it as 'locked' [Issue
  1183].

- The account 'disabled' flag was not being put into the account data
  table when SQL mirroring was enabled [Issue 1184].

- When attempting to view a test case while running that test case,
  the contents of the test case did not display [Issue 1190].

- When importing test results, there was no way to preserve the value
  of execution fields that are NOT in the CSV file [Issue 1200].

- Added a '-I' option to the upgrade and installation scripts to skip
  test suite integrity testing. Useful when test suite data structures
  will not change as a result of an upgrade or re-install.

---

## 2.22.02

This is a minor bug-fix release. Issues addressed in this release
include:

- If a test set was corrupt in some way, it was not possible to delete
  the test set.

- When saving a requirement, if the requirement pointed to a test case
  that was no longer available, the system could throw an error rather
  than saving the changes.

- If a test set file was damaged such that it had no sessions list,
  the delete set operation could fail.

- Under EXTREMELY RARE CIRCUMSTANCES it was possible for a task that
  was waiting for a 'read lock' to continue even though it had not
  acquired the lock. This would result in error reports like 'Can't
  call method "FETCH" on an undefined value'.

- When using the special '-X' option to INSTALL.pl (update
  executables) the ATMHandler, cgi_handler, and .htaccess files were
  not being updated [Issue 1143].

- When running step-by-step tests in run many at a time mode, per-step
  notes were not being recorded [Issue 1145].

- When importing tests or requirements, values for menu fields with
  embedded whitespace were not being correctly mapped to their
  equivalent values [Issue 1148].

- When refreshing a test session that is not associated with a test
  set, the refresh would not complete due to a deadlock [Issue 1149].

---

## 2.22.01

This is a minor bug-fix release. Issues addressed in this release
include:

- When using step-by-step results, viewing a session summary, and
  selecting a test case, the resulting window would not show the
  results and notes for each step [Issue 1103].

- 'dependson' fields in session variables were case sensitive [Issue
  1126].

- If a field was removed or renamed AND a user had saved a multi-edit
  preference where that field was referenced, the field continued to
  show up on the multi-edit page [ISSUE 1130, 1133].

- When importing tests or requirements from another suite, if the
  import was many levels deep, sometimes the folder tree in the new
  suite would not get updated until a synchronization was performed
  [Issue 1132].

- It was not possible to select the popup list of test in the make
  tests from requirements module. It was also not possible to select
  the popup list of requirements in the make requirements from tests
  module [Issue 1134].

- When importing tests or requirements from another suite, the saved
  searches were not working [Issue 1135].

- A single select menu requirements field was always defaulting to the
  first item, regardless of which item was identified as the default
  in the Requirements Field editor [Issue 1136].

- When using the rpc module, if the username parameter passed in was
  not a real user, the system would throw a run time error instead of
  just reporting the mistake to the submitter [Issue 1140].

- When importing tests or requirements from another suite, if you
  attempted to popup a list of to select from, the list that was shown
  was from the CURRENT suite, not the OTHER suite.

- During installation on some systems, after any missing Perl modules
  were built, the installer's current working directory was no longer
  the ApTest Manager home directory. This could cause various
  confusing messages and, in some cases, cause installation not to
  complete.

---

## 2.22.00

This is an enhancement release. The following major features have been
added:

- The 'filter' settings on the Run and Select Report pages have been
  moved to the top in a hidden region that you toggle open/closed to
  make filtering more convenient.

- You can now save test case and requirement searches and reuse them.

- A user with 'suite manager' privileges can now import tests and
  requirements into one test suite from another.

- You can now enable an automatic or manual test execution timer.

- On non-Windows systems, if Perl modules are missing during
  installation, they can now be installed in a local subdirectory or
  in the main system directories (to help accomodate use in
  environments where you may not have root access, such as a shared
  hosting server). We are also now mirroring the Perl CPAN system on a
  server at ApTest to ensure that required modules are always
  available.

- Fields of type 'file' now have an 'attach' button associated with
  them so that it is easier to associate files with test cases and
  requirements.

- When test cases or requirements are using the 'plain' name style,
  you can now create a test case or requirement and not edit it at
  all.

- When selecting multiple items from a folder tree-style list, you can
  now select a folder and have all the items in that folder and its
  children selected / deselected.

- When executing tests, clicking on the test case name to view the
  complete test case will now do so in the context of the test session
  - including interpolating any session variables referenced in the
  test case.

- In the session summary report, you can now personalize the view to
  include additional execution fields.

- There is now a global configuration option that, if set, causes
  users to be warned if a name they choose for a test case,
  requirement, or folder would be changed because it uses non-portable
  characters. This option defaults to off - no prompting.

- Under extremely high concurrent user loads, where all users were
  working on the same test suite, there was a possibility that some
  operations would time out because resources would not come available
  in time. There is now more comprehensive access control scheme that
  gives pending write operations precedence over read operations. This
  should improve performance in these high load situations, but have
  no real effect in typical operation.

- The previous version introduced a mandatory result of 'incomplete'.
  Some users objected to this. Now the system allows you to indicate
  which result, if any, means a step-by-step test is incomplete.

- You can now set a system-wide option if you want to permit the
  inclusion and editing of tables in wysiwyg and wysiwyg2 fields.

- Added explicit integration support for FogBugz as an issue tracking
  system.

**The following issues were also addressed:**

- When importing results into a session, it was possible for a result
  code to have leading or trailing whitespace. This would cause the
  result to not match defined results, and therefore be ignored in
  counts, reporting, etc. [Issue 1086].

- When an ID field was numeric, its value (which is the path and the
  auto-assigned number) was not being put into the SQL store [ISSUE
  1087].

- Updated the Mantis integration module to work with modern versions
  of SOAP::Lite. Also added the ability to have dynamic menus of
  values retrieved from Mantis during initialization.

- In the progress report, the last execution time was not being
  reported for tests that had been run, and was being reported
  incorrectly for tests that had not yet been run [Issue 1112].

- Under some circumstances history table entries could get created
  without recording the modifying user and modification time.

- Test case fields in tables that are of type date and style date and
  time were not correctly converted into SQL for some SQL stores
  (notably MS SQL) [ISSUE 1066].

- If a user's full name included a comma, it was split into separate
  parts and treated as 2 names in the Progress Report [Issue 1069].

- The wysiwyg2 field style did not work correctly in the find/replace
  screen [ISSUE 1073].

- When a readonly field is in a table, removing or reording rows has
  no effect on the readonly field [ISSUE 1076].

- Modifying a note via the session summary page would reuse the name
  of the original tester rather than the name of the user updating the
  note [ISSUE 1079].

- Removing a field on which another fields depends would result in a
  runtime error when trying to build the javascript for handling
  dependencies [ISSUE 1088].

- In some cases using a text field for execution times could result in
  the system mis-interpreting the meaning of the units on times (e.g.,
  4d or 3h) [ISSUE 1107].

- It was possible to define a table field that refered to itself,
  resulting in a loop and memory leak [ISSUE 1118].

---

## 2.21.01

This is a minor bug-fix release. Issues addressed in this release
include:

- Some debugging code was left in the Result Code Editor that could
  result in a popup showing up when saving.

- The import results operation could timeout if importing a
  significant number of results. It now reports progress so that the
  connection to the browser will stay active.

- A new '-l' option to bin/updateSuite.pl will check file name lengths
  and warn about files that are longer than 255 characters. This is a
  Windows path name limit and the check is automatically done on
  Windows, but this option can assist when migrating ApTest Manager
  from a non-Windows platform to Windows.

- When importing results, it was not possible to set the time when the
  test was executed nor the user who executed the test [Issue 1024].

- Report customization permitted the inclusion of per-step execution
  notes in some report output, but those reports were not actually
  able to display that information. Also, step-by-step tables had
  extra columns attached to them when included in reports [Issue
  1030].

- Under some circumstances the issue tracking and upload file links in
  the 'run many' page would link to the wrong place [Issue 1034].

- When some fields are marked as 'hidden', their labels are still
  displayed when they are used in a template [Issue 1035].

- It was not possible to include test case fields an exported test
  session [Issue 1036].

- If a field with a numeric datatype had garbage data in it, the SQL
  initialization would fail [Issue 1041].

- If a test result report were run on a subset of the tests in a
  session, the percentages in graphs were calculated based upon the
  total number of tests in the session rather than the number in the
  report. This resulted in erroneous data in some circumstances [Issue
  1043].

- Added processing of 'subprojects' to the Mantis integration module
  example [Issue 1046].

- In some reports, the order of sessions specified from the Select
  Report page was not preserved when the report was generated [Issue
  1048].

- The 'hours per day' setting for stafftime was not being used when
  calculating durations in the Session Summary [Issue 1049].

- On some 64bit systems, the encoding of data in the Run Single and
  Run Many tests pages could be confused [Issue 1050].

- Readonly fields in tables would be cleared during a save of a test
  case [Issue 1054].

- It was too easy to reset run data fields while running test cases.
  The user is now asked to confirm it [Issue 1055].

---

## 2.21.00

This is an enhancement release. The following major features have been
added:

- Changed the way that temporary data is cached so it is automatically
  cleaned up each time a user terminates their session (by logging out
  or timing out) [Issue 148].

- Added an option to save a test case or requirement and continue
  editing [Issue 936].

- Introduced the ability to set attributes on result codes. Attributes
  include 'obsolete', 'notify, 'hidden', and 'exclude'. See the Admin
  Guide for a detailed description [Issue 749] [Issue 978].

- Introduced per-step test results via a test case table field flag of
  'Add Result' and per-step execution comments via a test case table
  field flag 'Add Notes'. Also updated the pre-defined test suite
  profiles 'ApTest_B' 'ApTest_Y' to take advantage of the new flags.
  When these flags are set on a table, each table row is given a
  result selector popup and a textare in which comments can be entered
  when running a test. The real result is calculated based upon the
  result selections automatically. See the Admin Guide for a detailed
  description [Issue 30].

- Introduced option to hide sets that are locked from the list of
  available set filters on the Select Report and Run pages [Issue
  905].

- Added ability to export a test session in CSV format that is either
  human readable or in a raw format suitable for re-import into ApTest
  Manager [Issue 950].

- Added ability to mark session variables as "graphable" and graph
  results by session variable in some reports [Issue 974].

- Added ability to suppress headers, ignore missing tests, and ignore
  sessions with no matching tests in the Regression Report [Issue
  976].

- Added an option to create a zip archive of an individual test suite
  via the GUI [Issue 981].

- Test and Requirement reports now include both a total count and a
  percentage of reported items for each value in Selector Tables
  [Issue 986].

- Added support for Problem Report IDs and Problem Report Links
  (atm_prid and atm_prlink) fields in test cases and requirements
  [Issue 989].

- Added support for filtering a coverage report using test case and
  requirement selectors [Issue 957].

- Added ability to specify an email address to which a notification
  will be sent when the Archive System Data task completes [Issue
  991].

- Added an example 'timer' script in in the examples directory. This
  could be used to have the execution time of test cases automatically
  tracked.

- Improved the ability to use the keyboard to navigate among fields
  when editing test cases and requirements. Also added support for
  using keyboard to add a row to a table field (via Ctrl-Shift-N).

This release also addresses the following bugs reported since the last
release:

- When selecting a test suite, from time to time some information was
  not cached and as a result the selection page could take a very long
  time to display (or even appear to hang) [Issue 926].

- Added a note to the documentation to clarify how idle sessions are
  handled and timed out [Issue 967].

- In some situations the requirement import GUI could throw an error
  because it could not find its cache file [Issue 983].

- When creating a new account, the list of users from which to copy
  was being restricted based upon the currently selected test suite
  instead of showing all users [Issue 984].

- It was not possible to reference %RESULT_field fields in the bug
  tracking system URI from the session summary page [Issue 992].

- When performing test suite administrative operations, it was
  possible for the select suite page to throw a run time error. Also,
  the 'suiteLocked' page should have automatically continued when the
  suite was available [Issue 993].

- When doing bulk test case or requirement operations, if there was no
  change history table, the modification date and modifying user were
  not updated [Issue 1007].

- When changing selectors in multiple test sets, going to the refresh
  screen and then selecting cancel takes you back to the change
  selectors page, but the submit buttons were disabled.

- When generating a status report and matching test case names by a
  string, if a test case was no longer defined in the system but was
  referenced by a test session, the report would fail to generate with
  a run time error [Issue 1010].

- Under certain circumstances, the Users Report could throw a division
  by zero error when there was missing planned execution time data
  [Issue 1013].

- On some pages in the run area, the contents of long session variable
  values were not being displayed correctly in tooltips [Issue 1017].

- When checking test suite integrity during an upgrade, the collection
  of requirements was not being examined to ensure there are no
  duplicate UUIDs [Issue 1020].

- A Users Report could incorrectly count the number of tests when the
  Schedule Over Time table was reporting by week [Issue 1027].

---

## 2.20.02

This is a minor bug-fix release. Issues addressed in this release
include:

- When importing tests or requirements, it was not possible to use
  default values for fields that were mapped from the input file but
  whose contents were blank.

- When importing tests or requirements, it was not possible to have
  multiple rows in the input used in a single test case or
  requirement.

- The datatype of the atm_id field in SQL session data tables was
  being set to an incorrect value when upgrading from a very old
  version of ApTest Manager [Issue 964].

- The default value of a single-select execution field was always
  being set to the first item in the list, regardless of what item had
  an asterisk before it [Issue 965]

- The Select Report and Run Sessions pages can limit the number of
  sessions show. These pages were applying the limit BEFORE sorting
  the sessions in the user-specified order, resulting in seemingly
  random sessions being left out of the display [Issue 966].

- When using importResults.pl it was not possible to create a new
  session unless it was derived from a test set. The new '-C' and '-A'
  options allow the creation or extension of a test session using the
  test cases in the imported CSV file [Issue 972].

- Fixed the spelling of the variable newRepository in the config.pl
  file [Issue 969].

- When a custom report was accessed from the Edit Requirements area,
  some test sessions were being selected [Issue 973].

- There was no way to determine the UUID for a test case or
  requirement via the RPC mechanism [Issue 975].

- When using Postgres as the SQL store, in some circumstances the
  initial creation of tables would fail [Issue 977].

- On certain 64-bit systems, when using utf-8 encoding, the
  runTestCase page could have utf-8 encoded data double-encoded and
  thus output as gibberish [Issues 960 & 979].

---

## 2.20.01

This is a minor bug-fix release. Issues addressed in this release
include:

- The atm_owner field could not be made "multi-select" [Issue 882].

- When reporting on an individual test result from within a coverage
  report, the system could use the wrong test case result report
  template [Issue 932].

- Some customers need a way to always display the year on dates, even
  when the date is in the current year. Added an option for this to
  the System Configuration settings [Issue 933].

- The atm_owner field could not be marked as "mandatory" [Issue 935].

- When importing tests and requirements, it was not possible to
  populate fields with their default values [Issue 938].

- It was not possible to mark a value in a staff time field as
  obsolete [Issue 939].

- If there was no PlannedStaffTime field in a test suite, the users
  report could cause a run time error when attempting to display the
  new Per Session Assignment times table [Issue 940].

- Updated the documentation for the Test Case method newByUUID - it
  was confusing [Issue 942].

- When entering the Report or Run environment from the main index page
  (after selecting a new test suite) the user's session preferences
  were not loaded [Issue 949].

- When previewing replacements on wysiwyg fields where the input data
  has no embedded newlines, the preview data could be very wide.
  Changed this to use a 'div' with a monospace font instead of a 'pre'
  [Issue 951].

- Upgraded to the latest version of tiny_mce (embedded WYSIWYG editor)
  to improve behavior of pasting from MS Word [Issue 954].

- The dependson flag for execution fields did not work correctly if
  the values were in uppercase [Issue 955].

- In certain rare circumstances, a user's browser cache would not be
  reloaded automatically when first accessing ApTest Manager.

- A "remove formatting" button has been added to the WYSIWYG editors
  to make it easier to reset formatting to the default (this was
  omitted from the previous release at the last minute, and the
  release notes were incorrect).

---

## 2.20.00

This is an enhancement release. The following major features have been
added:

- It is now possible to mark Test Case, Requirement, and Execution
  Fields as "graphable". This is an indication to the system that the
  information in the field is suitable for use when graphing "Results
  by Selector" in various reports. By default, all fields that were
  marked "selectable" before will be marked "graphable" after an
  upgrade to this version.

- When defining report templates, it is now possible to define a
  default for which fields should be included in the "Results by
  Selector" tables in the report. If no such default is defined, then
  all fields marked as "graphable" will be shown.

- It is now possible to mark values in various fields as "obsolete".
  Obsolete values are still defined and will appear wherever they are
  referenced, but will not be available when working on new content,
  nor in content where they were not previously referenced.

- You can now define custom reports based upon your "Session Filter"
  settings. Such reports will generate by matching the filters against
  all sessions, rather than having to choose specific sessions.

- Renamed some Test Set and Test Session management options to make
  their purposes clearer.

- Added ability to assign new tests to testers when refreshing a Test
  Set or Test Session.

- When assigning tests to testers via the "assign" page (for either
  Test Sets or Test Sessions) a table shows how much time is assigned
  to each tester.

- You can now mark an account as being "disabled".

- When creating an account, you can copy some or all of the
  information from another account.

- Added a '-r' option to the restore.pl script that permits the
  interactive renaming of suites during restoration.

- The TestSession object now ensures that execution time values are
  ALWAYS stored as minutes, and that illegal values are rejected.
  Values using the format described in the documentation are
  permitted, but translated into minutes before being stored.

- The file "frames" in the Requirements and Test Case Management areas
  now remember your sort settings AND your position on the page after
  saving changes from child windows (e.g., from Edit Test Case).

- Made minor layout changes to the username/test suite bar on each
  page. Added a tooltip for the role so the user can know their
  permissions.

- Changed the font specifications so there is only one in the
  stylesheet and it is consistent throughout the product.

- Show Accounts administrative page now shows the last time a user
  accessed the server in addition to the other data.

- A "remove formatting" button has been added to the WYSIWYG editors
  to make it easier to reset formatting to the default.

**The following reported issues were also addressed:**

- Under extremely high concurrent use, the performance of deleting
  large collections of files / folders could be unacceptably slow.

- There were some situations where LDAP authentication could fail
  [Issue 920].

- When using the importFromCSV script, menu field values that had
  embedded whitespace were not being automatically transformed to use
  '_' [Issue 925].

- In Internet Explorer, the wysiwyg editor would create numbered lists
  where each item was numbered 0 when displayed in other user agents
  [Issue 929].

- When copying a test case or requirement, pressing enter in the
  dialog box did not cause the copy to occur in Internet Exporer
  [Issue 930].

---

## 2.19.02

This is a minor bug-fix release. Issues addressed in this release
include:

- If using an unusual encoding scheme, and while editing a test case
  or requirement, someone else edits and saves that test case or
  requirement, and then the first editor chooses to overwrite their
  changes, non-ASCII characters could be incorrectly encoded in the
  resulting saved file [Issue 885].

- In "run" mode, execution data fields now use the user-defined field
  label, rather than the default prompt text [Issue 895].

- If requirements are stored with an ID style of "plain" searching on
  requirements could cause a run-time error [Issue 897].

- When generating reports on requirements and customizing the report
  to filter the requirements by ID and/or other fields, there could be
  a run-time error [Issues 897, 902].

- Ensured that mandatory fields can't be made empty using the search-
  and-replace function [Issue 898].

- Added highlighting of search matches in the replace interface [Issue
  899].

- Ensured custom report settings can't be saved with whitespace-only
  titles [Issue 901].

- When generating a test case report, it was possible for a run time
  error to occur if filtering the test cases based upon requirements
  [Issue 902].

- Added the ability to mark text and textarea fields of Requirements
  as selectable [Issue 906].

- Renaming test cases and requirements could result in errors in
  long-running reports, due to a race condition [Issue 907].

- When using outline numbering with extremely large collections of
  tests or requirements, performance for many operations was
  unacceptable due to an inefficient method of dynamically determining
  the outline number of each folder and test or requirement [Issue
  908].

- Renaming a test set could fail to update the set's test sessions
  with the new set name, which could result in run-time errors for
  some session operations [Issue 909].

- When editing a wysiwyg style field using multi-edit, if only the
  contents of the wysiwyg field were changed, those changes were not
  captured [Issue 910].

- Fixed an issue with renaming test cases and requirements into the
  suite root in autonumber-by-folder mode [Issue 911].

- The Installation instructions section on Requirements for Windows
  neglected to describe a required SSL client that brings in the
  needed libraries.

- Identified and fixed a few places where it was possible, although
  extremely unlikely, that a deadlock could occur when updating cache
  files.

- When determining what calendar year the current day is in, if that
  day was the day when a time-shift occurred, and that time-shift
  occurred exactly at mid-night, there could be a run-time error.

---

## 2.19.01

This is a critical bug-fix release. Customers who had upgraded to
version 2.19.00 should upgrade to this release immediately. Issues
addressed in this release include:

- The unused-but-referenced file scripts/ajax/sound.js was missing
  from the distribution and consequently putting errors into the web
  server access log [Issue 888].

- When copying / exporting a suite there was a warning in the log
  about a missing filehandle when trying to unlock the suite [Issue
  889].

- When searching by ID and using a string there was an error raised
  [Issue 890].

- Creating a new suite / copying an existing suite could fail with an
  error about a call to a missing Suite::copy method [Issue 891].

- The "replacement value" field for WYSIWYG fields in the
  search/replace interface was showing a non-functional WYSIWYG editor
  when it should have been a plain text box [Issue 892].

- Under certain circumstances, copying, moving or renaming test cases
  and importing requirements could produce run-time errors [Issue
  893].

- Replacing in text fields could fail after the first replacement
  [Issue 894].

---

## 2.19.00

This is an enhancement release. The following major features have been
added:

- Suite managers can now cleanup deleted but hidden files.

- Revamped search / replace functionality.

- Added a richer table of contents option to many reports.

- Provided a simple web service interface for creating / updating test
  sessions.

- Added the ability to define a template for an issue tracking system
  URL for use in making problem report IDs "clickable".

- Added the ability to automatically make problem report IDs
  "clickable" when an associated problem report link field is also
  populated.

- Upgraded the WYSIWYG editor to improve its integration with popular
  web browsers and improve its performance.

- Updated the Jira issue tracking system integration module to be more
  stable and easier to customize.

- Added a new reserved "atm_prseverity" field that can be used to
  track the severity of a problem report

- Changed the session management area to be more "hierarchic".

- When arranging tests in a set or session, tests you do not want are
  now marked as "disabled" rather than "deleted", since this was
  confusing for some users.

- Added ability to just create a session / create and manage a session
  when using the "Run these tests" and "Run associated tests" options.

This releases also addresses the following issues:

- Fixed a bug in the file browser where quotes in a test case or
  requirement name weren't being escaped in the checkbox value [Issue
  867].

- When a test session was created, the SQL "SD" table was not
  populated with the information about the test session. [Issue 871]

- When importing test cases where the ID field contained "/" into the
  top level directory, it was possible to end up with hidden,
  duplicate test cases in the tree. [Issue 875]

- If a field was removed from a test suite, and that field was
  referenced in the customized settings for a report, it was possible
  to get a run time error when generating the report. [Issue 877]

- It was possible for the count of test cases in a test suite to
  become incorrect in some circumstances. [Issues 880, 886]

- It was possible to create test case / requirement names that had
  characters in the displayID such as <, >, and &. These needed to be
  escaped to ensure the page displayed correctly. [Issue 883]

---

## 2.18.02

This is a minor bug-fix release. Issues addressed in this release
include:

- Fixed a bug in the display of requirement field selectors for menu
  fields where the fields were too small.

- ApTest Manager now asserts a minimum version for the JSON component
  of 2.07 to avoid a missing "latin1" method in much earlier versions
  [Issue 856].

- Added a note about requiring libssl on Linux systems.

- Removed the "run these tests" option from the bulk operations menu
  when in the Trash directory.

---

## 2.18.01

This is a minor bug-fix release. Issues addressed in this release
include:

- The buttons related to LDAP operations on the Change Existing
  Accounts screen did not work as expected in Internet Explorer [Issue
  846].

- The progress report did not total execution results per test set
  correctly when ignoring untested tests [Issue 847].

- Fixed a run-time error during test and requirement import when
  importing into a history table that has a non-existent field in it
  [Issue 848].

- There was a potential deadlock situation when the file/folder order
  cache was cleared during a rename operation and a few other unlikely
  edge cases [Issue 851].

- Fixed an issue when customizing the regression report, where a
  customization option appeared in the wrong area [Issue 852].

---

## 2.18.00

This is an enhancement release. The following major features have been
added:

- If configured, user account information and authentication can be
  done via LDAP.

- You can now import links between test cases and requirements when
  importing either test cases or requirements.

- You can test the connection between ApTest Manager and your locally
  configured e-mail server.

- You can select which test cases are associated with a requirement
  from the requirements editor.

- You can select and edit multiple test cases or requirements
  simultaneously.

- Changing requirement or test case links when editing a test case or
  requirement, or when importing, now triggers a "requirement changed"
  or "test case changed" notification.

- You can elect to disable the feature that permits tests to be
  selected and run directly from the Test Edit and Requirements Edit
  areas.

- Copying folders now also copies their descriptions.

- When copying a test suite, you can now elect to also copy the suite
  access permissions.

This release also addresses the following issues:

- The various field editors now work correctly with the Apple Safari
  web browser (version 3 or later) [Issue 213].

- When a requirements report was set to generate a CSV file AND was
  also set to suppress requirements with no associated test cases, no
  requirements were included in the report.

- When a date field was of style date (as opposed to date and time)
  the selected date was at the then-current time of day instead of at
  the beginning or end of the day [issue 721].

- When executing test sessions, uploaded files are stored in separate,
  incrementally-numbered subfolders to prevent existing file uploads
  from being overwritten during subsequent re-running of the session
  [Issue 732].

- Under rare circumstances a race condition could cause a deadlock
  when multiple requests were operating on the cache of test case
  information. This has been resolved [Issue 785].

- When submitting a bug from the Session Summary page, the "note"
  field now only includes the most recent note, in line with
  submitting from the run pages [Issue 798].

- Folder orders could be corrupted when table fields were shown in the
  test case ordering screen [Issue 799].

- Certain cookies weren't being accepted by IE due to timezone display
  problems [Issue 803].

- Fixed an issue with change details when moving multiple test cases
  or requirements [Issue 804].

- Fixed an issue with conflicting options with time tracking fields in
  progress reports resulting in a run-time error [Issue 805].

- Test Case numbering mode changed from autonumbered to autooutlined
  for ApTest_C profile [Issue 806].

- The export.pl and exportAll.pl scripts now also include local.js,
  local.css, and localconfig.pl [Issue 807].

- Templated test case reports now can have execution data selectors
  when run against sessions [Issue 808].

- Session summary test fields do not display test data. [Issue 809]

- Namepart fields with backslashes in the content could cause
  javascript runtime errors when using the file browser [Issue 814].

- Notifications of test case assignments now occur when a session is
  created from a set with default assignments [Issue 817].

- Custom report names were not being URI-escaped when being passed to
  the customize report component, which could result in URI errors
  [Issue 818].

- Fixed some issues with version control integration commands not
  being called correctly during import operations [Issue 819].

- Fixed an issue with file links being broken when the tree is in
  auto-outline mode [Issue 821].

- The cross-link between a test case and a requirements are cleared
  when the test case or requirement is deleted from the Trash folder
  [Issue 822].

- Fixed an issue where certain characters could cause a JavaScript
  error in the field editors, resulting in the editor not appearing
  [Issue 825].

- Fixed an issue with previewing changes to test execution templates
  where session variable references weren't being expanded correctly
  [Issue 828].

- Synchronizing a test suite failed to refresh the cache for test
  sessions not attached to a test set [Issue 831].

- Blank values in execution data menu fields are now suppressed when
  ApTest Manager displays the associated field selector (as occurs
  with test case and requirement fields) [Issue 834].

- When tests cases used auto-outline mode, in some reports the table
  and graph of "Results by ID" was sorted incorrectly [Issues 837,
  838].

- In the field editors, table values weren't being validated properly
  [Issue 840].

- The "cover by" setting for saved coverage report settings wasn't
  being shown properly in the Customize Report screen [Issue 843].

---

## 2.17.02

This is a minor bug-fix release. Issues addressed in this release
include:

- Changed message shown when a license is expiring to make it clearer
  how to resolve the problem.

- In the frame showing Set Group contents, the value of the ID
  selector could be incorrectly suppressed in some instances.

- Recursive folder locking from the root of the suite didn't work
  correctly [Issue 778].

- WYSIWYG editors were encoding some characters as HTML entities when
  it didn't need to [Issue 779].

- It was possible for a deadlock to occur when showing test cases that
  cover requirements in the Edit Requirements right hand frame [Issue
  780].

- The "creator" of suites created by exportSuite.pl is now set to be
  the creator of the suite being exported [Issue 781].

- The content of the notes field was not being correctly escaped when
  being passed to a bug tracking system from the "run multiple" screen
  [Issue 784].

- There was a warning when compiling TestSession.pm [Issue 788].

- The file order cache could get corrupted when clearing the test case
  order in a folder [Issue 789].

- When using HTTP Basic Authentication, logging out would cause the
  user to automatically re-login.

- Added ability to suppress the "Per Test Case User Assignments" table
  in the Users report.

- Fixed an issue where mdate and muser fields were not getting default
  values on import.

- Fixed a problem where the "run this test" option from the session
  summary screen did not update the session end date if running the
  test completed the session [Issue 791].

- Fixed a problem with alignment of progress bars on some run pages in
  IE 7 [Issue 794].

- Fixed an issue where submitting a note with no associated run data
  erases current run data settings [Issue 795].

- Fixed an issue where "run these tests" didn't properly initialize
  some session variable values [Issue 796].

- Templated reports that were not based upon "results" did not report
  estimated times.

- Fixed an issue where values in radio and checkbox fields were not
  always treated as being case-insensitive, resulting in duplicate
  values in some report graphs and tables [Issue 797].

---

## 2.17.01

This is a minor bug-fix release. Issues addressed in this release
include:

- Fixed a JavaScript error in IE when the first text field of a form
  couldn't receive focus [Issue 765].

- Resolved some issues with special character escaping in field
  defaults [Issue 766].

- Fixed an issue with refreshing the parent window when saving tests
  or requirements opened from a list of search results [Issue 770].

- Fixed an issue with selecting test cases by requirement [Issue 771].

- Fixed an issue where some field types were being incorrectly mapped
  to underlying SQL datastore field types [Issue 773].

- Fixed an issue where the importResults command-line script wasn't
  forcing results to lowercase [Issue 775].

- Fixed some issues relating to creating a set from a session.

- SQL configuration screens now re-display the configuration data form
  when there is a configuration error.

- Resolved a potential deadlock situation in the test and requirements
  databases.

- Altered CSS to make labels for checkboxes and radio buttons
  consistent, regardless of layout.

- Users with execute access can now create anonymous sessions.

- Suppressed invalid run selector options when opting to "run these
  tests".

- Prohibit rundata fields with the name "id".

- Fixed a run-time error for some users with read-only test access
  when returning to the edit screen after searching for tests.

- The bailOut() method of the Framework library now automatically
  includes a stack trace with the error message.

- Fixed an issue with single-select menus not selecting empty values
  properly.

- When displaying notes with no associated result in test sessions,
  the full name of the user is shown, rather than the username.

- Editing test case report templates now ALWAYS shows the execution
  field pulldown.

- Added checks for working with VERY old versions of MySQL, since the
  Perl drivers are not completely compatible.

- Added code so when creating a new session from the Edit Tests or
  Edit Requirements pages you can specify the name and description for
  the session.

---

## 2.17.00

This is an enhancement release

- Added checkbox and radio button field types to Session Variables and
  Requirement, Test Case, and Execution Fields.

- Made Sessions a link to session display in Administer Sets and
  Sessions right frame.

- Added Customize Report option for Progress Report to only include
  latest executed result for each test case in report.

- Added "% of executed" to results section of summary in Progress
  Report.

- Added Customize Report option for Progress Report for "Results by"
  calculations include only executed tests.

- Added ability to create and run Test Sessions from the Edit Tests
  and Edit Requirements pages.

- Added ability to create a Test Set from a Test Session created from
  the Edit Requirements/Edit Tests screens

- Changed "Search by ID" to Search by any field on the Edit Tests and
  Edit Requirements screens.

- Restructured the user interface of Report customization and Test Set
  definition to improve usability.

- Added ability to pick Test Cases by associated Requirement fields in
  Test Set definition.

- Added ability to pick Requirements and Test Cases from a list in
  Test Set definition and report customization.

This release also addresses the following issues:

- Performance of the test set/session assignment and arrangement
  interfaces could be poor when faced with very large sets or
  sessions. Made a number of client-side changes to improve this
  performance, and also to give visual indication when processing is
  taking longer than expected [Issue 379].

- Fixed results by selectors in progress report so execution fields
  are included [Issue 734].

- The code that checks for long filename problems on Windows during
  upgrades could fail to report the list of problematic filenames
  [Issue 750].

- Fixed issues with corruption of cached folder order data [Issue
  752].

- Renaming a folder could cause it to disappear from the folder tree
  view, requiring a synchonization to make it reappear [Issue 753].

- Fixed an issue where the first tests in a folder might not get
  copied when copying a folder [Issue 755].

- Fixed an issue with newlines in text fields causing JavaScript
  errors in the file browser; also removed newlines from text fields
  during CSV import [Issue 762].

- Some bulk operations on sets within set groups were erroneously
  being applied to all sets in the group, regardless of the sets that
  had been selected [Issue 764].

- Fixed a problem with SQL integration where uninitialized times were
  being set to a time before 1970 when the server was east of UTC.

- Improved performance of exportAll.pl script when used with a large
  number of large test suites.

---

## 2.16.02

This is a minor bug-fix release. Issues addressed in this release
include:

- A JavaScript error in IE when opening the run or report pages with
  no sessions listed [Issue 736].

- Fixed issue where copying a suite copied sets and sessions even if
  those checkboxes weren't checked [Issue 737].

- Fixed an issue with session deletion, where old sessions with four-
  digit session numbers could fail to be deleted [Issue 738].

- Fixed issue with the field editors, where an error message could
  appear when creating table fields [Issue 739].

- When importing a CSV file where multiple rows had the same "id"
  entry, some cache data could become corrupted. Now prevents
  importing duplicate records [Issue 740].

- Certain settings in requirements reports could cause a generated CSV
  format report to contain no rows [Issue 741].

- Performing a bulk move of test cases when in auto-number mode could
  incorrectly report that there would be a collision with names in the
  destination folder [Issue 744].

- Running multiple tests and uploading a file to a test case that had
  been renamed after the session had been created could result in a
  run-time error [Issue 745].

- Copying test sessions could result in the copy containing incorrect
  counts for results [fix for this was mistakenly NOT in 2.16.01].

- When copying a suite, copying sessions now requires that sets are
  copied too.

- The message about an "invalid license file" has been improved to
  help people resolve the problem.

- When a test case was renamed/moved, the "id" field in the "SD" table
  of an associated SQL store was not updated.

- When a test case was renamed, the record for the test case was
  removed from the "TC" table of the associated SQL store.

- When managing the SQL store configuration for a test suite, some of
  the previous settings were not displayed.

- The default styling for fields of type "table" was such that content
  was not vertcally aligned "top". Changed that default style, and
  added a class of "TYPE_tc_table" so it can be locally restyled
  easily.

- Changed field labels so that they are fully enclosed in a span of
  class "fieldLabel".

- Delayed creation of Perl Warning Handler under mod_perl to help work
  around a bug in Apache for Windows that would cause Apache to fail
  to startup sometimes.

- Changed how file locks and SQL database connections are released in
  the face of a catastrophic error to help avoid situations where a
  deadlock might occur when running under mod_perl.

- Added a message so it is clearer when a "Search by ID" matches no
  test cases / requirements.

- Select report page is now sorting the list of Sets in the Set
  selection box.

---

## 2.16.01

This is a minor bug-fix release. Issues addressed in this release
include:

- Improved performance of the Select Reports and Run pages in the
  presence of large numbers of sessions [Issue 724].

- The UPGRADE script was not passing command line arguments to the
  underlying INSTALL.pl script [Issue 725].

- If some Test Set / Test Session meta data had newlines embedded in
  it, CSV format reports could become corrupted [Issue 728].

- Copying test sessions could result in the copy containing incorrect
  counts for results.

- The checkForUpdates component was incorrectly interpreting messages
  from the ApTest server.

- Fixed a problem in session refresh, where a test entry with no UUID
  could produce errors.

- An error in the ReportCache library could cause errors in some
  environments.

- Removed the non-functioning breadcrumb link which appeared in the
  navigation bar if you tried to define a set with no name.

- Added a workaround for an issue with PPM on Windows when trying to
  upgrade the DateTime::Locale module.

- Fixed an issue with not being able to unlink deleted requirements
  from test cases.

- Fixed an issue with test<->requirement links getting lost when
  requirements were renamed [Issue 731].
