IwTest Release Notes
====================

v1.1.0 (10 May 2020)
--------------------

* Redesigned look & feel
* Added full test suite editing functionality in the UI
* Test cases can now be duplicated from the UI, including the possibility to
  define extra stubbed services
* Test cases can now be run immediately from the Test Suites page
* Test cases can now be disabled
* Test suites now can define a setup and/or a teardown service, optionally specifying an input file
* Added 'About' page, including license upload facility

v1.2.0 (13 June 2020)
---------------------

* Test cases can now be 'repaired', preserving any regular expressions.
* Bugfix: pipeline is now saved with the result when a callback fails
* Usability: assertions are now sorted in the results page

v1.2.1 (16 August 2020)
-----------------------

* Bug fix: <null name="foo" /> fields in saved pipelines could not be edited because of an NPE.
* Bug fix: Error messages in the GUI popped up if a service under test set the HTTP return 
           code != 2xx
* Cosmetic: The full width of the browser window is now used for listing test suites and recording 
            services
* Bug fix/feature: New parameter 'record.services.use.service.signature introduced analogous to 
  'record.stubs.use.service.signature': option to only record advertised inputs and outputs

v1.2.2 (21 August 2020)
----------------------

* Bug fix: if 'ui.distributed.enabled' was set to true, then when a test case
  executes, server wide stubs were created on all known Remote Agents, but they
  were not removed. Now they are, plus, they're only created if callbacks are defined.

v1.3.0 (19 October 2020)
-----------------------

* Gave the UI a more modern, cleaner look
* Bug fix: Loading a newer version of IwTest & IwTestAgent now doesn't require
  a restart anymore
* Bug fix: Repairing test cases failed with an NPE if the input or output contained a string 
  list or table containing a null value. This has been resolved
* Performance: the list of test suite service is now cached. The 'Test Suite'
  page now loads much faster on IS's with many packages
* Empty IData arrays are now also flagged as data types that cannot be
  represented in JSON
* Added links from test case on the Results page to their definitions.
* Extra icon for expanding/collapsing test case details

v1.3.1 (20 October 2020)
------------------------

* Bug fix: Test suites would not get listed if only one of them referred to a
  non-existing stub directory. This has been fixed.

v1.3.2 (13 December 2020)
-----------------------

* Bug fix: After running all test suites, sometimes the statistics were
  incorrect. 
* Bug fix: If a test suite pointed to a non-existing folder, it would not show up in
  the 'Test Suites'  page.
* Bug fix: an NPE was thrown if a stub was not fully configured. Now a clear
  exception is thrown.
* Bug fix: the input of a setup/teardown service can now be edited through the
  GUI; Also, an empty input pipeline is now created if a setup/teardown
  service is selected.
* Bug fix: file browser now scans the directory everytime it's activated,
  instead of showing the previously shown contents.

v1.4.0 (10 January 2021)
------------------------

* UI: all dialogs are now modal; sharper look
* Feature: Setup/teardown services can now be executed individually and against remote
  servers. Plus, they're now only executed if the whole test suite is executed.
* Feature: introduced the concept of 'environments': a collection of remote
  servers that support distributed test scenario's. 
* Feature: in the 'About' page one can now manually check whether a new
  version is available and read the release notes. One can subsequently download it 
  and install. One can also enable an automatic daily update check.
* Feature: One can now drag-and-drop a license file into the upload area.
* Feature: one can now edit the inputs *before* duplicating a test case.

v1.4.1 (17 January 2021)
------------------------

* Bug fix: Test Suites page: no jump to top anymore when clicking on 'delete'
  or 'execute' test suite
* Cosmetic: the 'Configuration' page has been split into a 'Settings' and an
  'Environment page.
  
v1.4.2 (31 January 2021)
------------------------
* Bug fix: the automatic 'check for updates' feature, if enabled, now correctly checks 
  for updates
* Cosmetic: added XML syntax highlighting for editing raw pipelines
* Upgraded to JSONEditor v9.1.9.
 
v1.4.3 (7 March 2021)
---------------------
* Logback is now used as the logging backend, making it independent of IS 
  logging  (SAG replaced log4j in 10.5)
* Bug fix: byte arrays - a data type supported by IDataXMLCoder - were not
  properly compared. Now they are.

v1.4.4 (11 April 2021)
---------------------
* Bug fix: If a pipeline input was specified for a 'service' stub, then
  reading it during execution failed. Now it's properly read.
* The 'remote-this-alias' is no longer saved on the Agent, but rather 
  in IwTest itself. 
* The mechanism that implements the callback functionality does not 
  generate notifier services anymore.

v1.5.0 (16 May 2021)
--------------------
* Feature: Utility for migrating WmTestSuite files
* Optimization: when generating dynamic stubs, duplicate stub instances are filtered out
* Optimization: if there is only one choice for a dynamic stub, the 'match'
  file is cleared generated

v1.5.1 (24 May 2021)
--------------------
* Bug fixes for the WmTestSuite migration utility: paths now always contain forward slashes;
  option for 'lax' validation; corrected erroneous logging statement; better reporting 
  of warnings and errors.
* Bug fix: the explicit 'exception' stub now longer wraps a
  com.wm.app.b2b.server.ServiceException in a com.wm.util.ServerException. 
  *Warning* This might invalidate test cases that use explicit exception stubs!
  
v1.5.2 (04 July 2021)
---------------------
* Feature: regular expressions are now also supported in inline exceptions
* Feature: the repair functionality now also works on exceptions
* *Warning*: The exception passed by the callback mechanism back into the test case is
  now the 'cause' of the exception, if there is any. This may invalidate test cases that
  test for exceptions that occur in asynchronously executed code.
  Example: a divide by zero exception is reported as:
    java.lang.ArithmeticException: / by zero
  not as:
    com.wm.app.b2b.server.ServiceException: java.lang.ArithmeticException: / by zero
* Bug fix: for remotely called services that drop inputs, those inputs were still
  visible in IwTest. This has been corrected. 

v1.5.3 (14 July 2021)
---------------------
* Bug fix: fixed NPE that occurred when recording a (stubbed) service with no
  declared input or output fields 
* Bug fix: the message saying that an expected exception was not as expected,
  contained the class name twice. This has been corrected.
* Feature: descriptions for test cases and test suites can now be edited through
  the UI 

v1.5.4 (25 October 2021)
------------------------
* Bug fix: Arrays of Shorts, Integers, Longs, Floats and Doubles can now
  correctly be validated.
* Bug fix: When running multiple test suites, it could happen that in the GUI
  it appeared as if the tests were still running, but in fact had already
  finished. This has been corrected.
* Enhancement: Test Suites and Results are now shown collapsed by default.
* Enhancement: There is now easily run all test suites for one package from
  the Test Suites page: there is now 'run' button for each package.
* Enhancement: The setting 'ui.update.check.enabled' has been renamed to 
  'ui.update.check' with these possible values: update (default), check, off
* Enhancement: There is now a clearer visual distinction between stubs and callbacks
  in the test suite editor by using different background colors. 

v1.6.0 (13 February 2022)
-------------------------
* Feature: a new facility has been added to the 'record' page that let's you
  execute a local or remote (flow) service.  
* Feature: you can now validate JSON input and output data
* Feature: you can generate random, but structurally correct, input data
* Enhancement: on the 'record' page you can now show and hide services that are 
  configured for recording
* Enhancement: not all GUI elements on the 'edit test suite' panel were visible for
  test suites with many test cases. Now they are.
* Enhancement: after editing a callback or changing the 'Lax' flag the test suite is 
  saved immediately without the need to click the 'save'-button'.
* Bug fix: changing a stubbed service (type 'dynamic') did not change the folder name
  on the file system. Now it does.

v1.6.1 (29 April 2022)
----------------------
* Bug fix: fixed an NPE in iw.test.agent.manage.schema:get that occurred when a service
  did not have an input or output defined
* Bug fix: due to restructuring of the logging facility, the previously defined log-level 
  of iw.test was not set on restored on startup. Now it is.
* Bug fix: the timer that checks for updates was not removed when the IwTest package is
  unloaded. Now it is.
* Enhancement: IwTest now also can produce sample data for string tables

v1.6.2 (2 May 2022)
------------------
* Bug fix: fixed an NPE in iw.test.generate.service:createTestSuiteService that occured when
  generating a test suite from recorded data.

v1.6.3 (8 May 2022)
------------------
* Performance: The test results page now loads much faster if there are many test case and 
  assertions. Also opening a test suite for editing which has many assertions in the
  current results now occurs much faster.
* Bug fix: the 'Check for update' button on the 'About' page did not return a message. Now 
  it does.
* Enhancement: now when the assertion mode is 'lax', mismatches in array length do not result
  in a validation error anymore.

v1.7.0 (20 August 2022)
-----------------------
* Feature: global code coverage. There is now a new page that shows for all services
  whether there any test cases defined for them, and if so, how many and where they are located.
  There are graphs for the overall coverage and the per package coverage.
* Enhancement: the directory where initially test runs are recorded, configured by the setting 
  'record.storage.location' will now be created, provided the path is relative.
* Bug fix: the link from the 'results' page to the test suite definition did not work correctly
  if the service is tested by two or more test suites. This has been fixed.

v1.7.1 (27 September 2022)
--------------------------
* Feature: extra option to clear the cache for the service or for all services before executing
  a test case.
* Bug fix: Changing the event type of a callback was not working properly. Now it is.
* Bug fix: Fixed an NPE that occurred if a null value was expected, but not present in the actual
  results.
* Enhancement: Empty arrays were not correctly reported in the assertions. Now they are

v1.7.2 (24 October 2022)
-----------------------
* Enhancement: UI controls for removing/duplicating dynamic stub entries
* Enhancement: When generating a test case with a dynamic stub that has more than one entry, a 
  'default' entry is created as a 'catch-all'. This prevents 'Cannot find matching stub entry'
  -errors.
* Enhancement: Extra 'Close' button on the inline results panel.
* Enhancement: One can now also record 'system' services.
* Bug fix: Sometimes an output was not recorded if child service was separately recorded. Now
  the output is always recorded.

v1.7.3 (8 November 2022)
------------------------
* Bug fix: the assertion logic in 'lax' mode did not report missing expected array elements. 
  Now it does: expected data must always be present in the actual data. 
  WARNING: existing passing test cases may fail.

v1.8.0 (31 January 2023)
------------------------
* Bug fix: Fixed a ClassCastException that occurred if a String[] was encountered instead
  of a String
* Feature: Dynamic Code Coverage. One can now get an assessment of how much flow code was
  covered by the test cases. There is a separate page that shows in detail which paths were
  executed.

v1.8.1 (12 March 2023)
----------------------
* Bug fix: Dynamic Code Coverage now also works for IntegrationServers running on Java 9 
  or higher.
  Warning: a server restart may be required.

v1.8.2 (31 August 2023)
---------------------
* Bug fix: Reduced the connection timeout for unreachable hosts. This used to be two minutes,
  now it is a second.
* Bug fix: In the Static Code Coverage page the colored progress bar was not always visible.
  Now it is.
* Enhancement: Added a summary table for the Dynamic Code Coverage page.

v1.8.3 (14 January 2024)
------------------------
* Enhancement: one can now download the Dynamic Code Coverage report.
* Enhancement: the list of test suites is now presented as a tree
* Bug fix: IwTest is now insensitive to the Extendend Setting watt.server.http.jsonFormat
* Enhancement: one can now use a regular expression to validate the class name of an 
  exception
* Enhancement: the 'record' page now remembers which services were selected for stubbing 
  after a recording session was stopped.

v1.8.4 (10 February 2024)
-------------------------
* Bug fix: Fixed a StackOverflow error when generating sample data for complex document
  types with multi-level recursive definitions.
* Bug fix: A downloaded input/output/error file had a space in its name; now a dot appears
  instead.
* Bug fix: If the 'Base Directory' of a test suite started with './packages' (instead of 
 'packages'),
  then the path was considered to be relative to the package, instead of the the IS working
  directory.
* Bug fix: Under certain circumstances a regular expression in an expected output was not
  honoured. Now it is.

v1.8.5 (9 August 2024)
---------------------
* Bug fix: iw.test.agent.manage.testrun:delete does not throw an exception anymore if
  one tries to delete testruns for a service that was not even registered for recording.
* Bug fix: In the code coverage report BRANCH and LOOP now say on what they branch or 
  loop over.
* Bug fix: Massively reduced the number of calls to iw.test.logging:log.
* Enhancement: Comments on a test suite are now carried over to the comments of the 
  corresponding flow service
* Enhancement: There appears now a link to the test suite in the message after generating
  a test suite.
* Enhancement: The base directory of a test suite can now be relative to the package it
  resides in.
* Enhancement: There is a now flag 'Ignore data type difference' [yes/no/defer to global
  default] on the expected results.

v1.8.6 (15 November 2024)
-------------------------
* Bug fix: The 'Ignore data type difference'-flag now also works on callbacks.
* Bug fix: Fixed an NPE that occurred when a service was executed in the 'Record'-page,
  that had references in its input or output to non-existing document types.
* Enhancement: If the 'distributed'-mode is enabled, one can now edit the properties of
  the remote agents.
* Enhancement: The number of the days to retain old log files can now be changed in the 
  'Settings'-page.
* Enhancement: When recording a service (and its defined stubs), their cache is now cleared
  to force a recording.
* Enhancement: One can now execute a test case/suite with its stubs disabled.

v1.9.0 (7 January 2025)
-----------------------
* Bug fix: An invalid JSON-schema was produced by the 'iw.test.agent.manage.schema:get' 
  service if the input or output defined duplicate fields. This has been corrected.
* Bug fix: The downloaded and extracted dynamic code coverage report could not be viewed
  because of missing js-file. This has been corrected.
* Buf fix: The 'Start'-button on the panel for registering a service for recording would
  become unreacheable if the service implementation was large. This has been corrected.
* Enhancement: IwTest now records disabled test cases as 'skipped' if they happened to be
  included in a test run. This information is also carried over to the result in JUnit 
  format.
* Enhancement: One can now easily change a 'normal' expected output into an 'exception'
  and vice versa.
* Enhancement: One now gets a warning when repairing a test case and the failing assertions
  are inlined. Also if one tries to accept an exception as the expected output, but a 
  normal result was expected (and vice versa).
* Enhancement: One now gets a confirmation dialog when trying to delete a stub or a callback.
* Enhancement: A new parameter 'record.recordings.max' was introduced in order to limit
  the number of recorded test runs and as such to prevent accidentally filling up the file 
  system.
* Enhancement: Complete overhaul of the Logs page: introduced paging, ordering 
 (ascending/descending), percentage seek and the possibility to view the logs of remote 
  agents.
  
v1.9.1 (8 February 2025)
------------------------
* Bug fix: iw.test.agent.schema:get would not return any sample data if all fields of an 
  input or output structure were optional. Now it does.
* Bug fix: When repairing a callback, IwTest would add a field named '$alias' to the 
  pipeline, which during runtime would be absent and then lead to a validation error.
  This now works correctly, i.e. '$alias' is not added anymore.
* Bug fix: dynamic code coverage would not automatically be enabled after a reload
  of IwTest or a restart of the IntegrationServer, if it previously was enabled in 
  Configuration -> Settings -> execute.coverage.enabled. Now it is.
* Bug fix: after downloading the dynamic code coverage results, the archive did not 
  contain all files due to a bug in iw.test.util.file:copy. This has been corrected.
* Enhancement: The last opened/edited test suite is now made bold in the test suite
  definitions overview.

v1.10.0 (10 June 2025)
---------------------
* Enhancement: The last edited test suite service now appears at the top of the
  'Test Suites' page.
* Enhancement: Recorded test runs can now be inspected in their native pipeline
  format (IData XML encoded) and also be downloaded individually, but also zipped in 
  a collection of test runs.
* Enhancement: There are now extra options for repairing failed test cases. One can now:
  1) choose to keep all defined regular expressions in the expected results
  2) only fix values for the fields that are defined in the expected results
* Enhancement: better reporting when repairing test cases: inline assertions and inline
  exceptions cannot be repaired.  
* Enhancement: The JSON editor is now disabled when editing input/output pipelines that contain
  problemetic fields or that contain duplicate keys. An override is provided though.
* Enhancement: key-board navigation is now supported when selecting a service.
* Bug fix: In the 'Execute Test Suite' dialog some test cases were not reacheable if there
  were many. The dialog now provides proper scrolling.

v1.11.0 (20 October 2025)
----------------------
* Feature: Static Stubs. It's now possible to define stand-alone stubs outside of test
  suites in the 'Static Stubs' page. These stubs can be generated from recorded
  test runs, but they can also be defined manually. 
  Static stubs that are marked as 'auto-load' will be activated when the IS starts.
* Feature: Active Stubs. It's now possible to view and inspect active stubs in the
  new 'Active Stubs' page.
* Enhancement: upgraded the GUI to use Vue 3.5.17.
* Enhancement: the log data in 'Logs' page is now confined to a scrollable pane.
* Bug fix: under certain conditions the 'Edit Test Suite' panel would show the
  wrong service to execute. Now it shows the correct one.

v1.11.1 (21 October 2025)
-------------------------
* Bug fix: The Static Stubs page used 'crypto.randomUUID()' to generate a unique id for
  a static stub. However, this method is only available in secure web contexts (HTTPS
  or localhost). This method has been replaced with a reasonable alternative.

v1.11.2 (23 October 2025)
-------------------------
* Bug fix: if a test case had two stubs or more, then only the last stub was removed;
  the other stubs remained active and potentially changed the outcome of other test 
  cases. Now all stubs are cleared at the end of a test case. 

v1.11.3 (3 November 2025)
-------------------------
* Bug fix: if a test case had one or more misconfigured stubs, and if they were defined
  before valid stubs, then the valid stubs would not be removed after the test case
  was executed. Now they are removed.
* Bug fix: Toggling between an expected 'normal' output and an expected exception, 
  lead to an invalid test case definition. This has been corrected.
* Bug fix: When a newer version of IwTest was available, the newer release notes 
  were not downloaded.  Now they are and visible in the About page.
* Bug fix: if a pipeline file used as the input or output of a test case (usually 
  generated by the 'Record' facility) contained a character that is not allowed in an
  XML file, then IwTest would throw an exception and would fail the test case. The IS
  however is more permissive when parsing the pipeline XML file and allows characters
  that are otherwise illegal in XML, like control characters such as 0x00. 
  IwTest does not perform an XML validation anymore when executing a test case. The
  GUI still does the XML validation, but this can be overruled.
* Enhancement: IwTest now distinguishes between an unexpected exception in the service 
  under test and an exception that occurred in the execution logic itself. The latter 
  cannot be 'repaired' and should be reported.

v1.12.0 (13 January 2026)
-------------------------
* Enhancement: one can now rename a test suite service in the UI; the configured base
  directory will be updated accordingly.
* Enhancement: one can now move a test suite service to another package; the 
  associated input/output/error test files will be moved as well.
* Enhancement: one can now reorder test cases within a test suite in the UI.
* Enhancement: the 'Test Suite' page now has context menus for running/renaming/
  moving/deleting test suite services.
* Enhancement: the 'Record' page now has a context menu for actions on services
  that are configured for recording.
* Enhancment: IwTest now detects renamed fields when comparing actual results with 
  expected results. Previously it reported a missing field and an unexpected field.
* Enhancement: the 'Record' page used to poll the IS every couple of seconds for updates.
  Now the server sends the updates when they happen to the browser.
* Enhancement: if the recorded output of a service contains a regular expression, then
  this regular expression is 'escaped' upon generating a test case in order for it to be
  interpreted literally.
* Enhancement: if one updates the name of a test case, then this new name is now saved to the
  'meta.xml' file of that test case.
* Enhancement: on the 'Record' page in the dialog for generating a test suite, one can now
  search for existing packages and existing test suite services.
* Enhancement: on the 'Record' page now prompts the user for confirmation when he tries
  to recreate a test suite service (mode = overwrite), and when he tries to deleted all
  recorded runs of a service.
* Bug fix: if one would record a service that at the same time is configured for recording
  as a stub for another service, then this service would 'steal' the recordings from the other
  service. This does not happen anymore. Now a service is properly recorded both
  as 'main' service and as stub of another service.
* Bug fix: on Linux the Dynamic Coverage agent would not load. This has been corrected.
* Bug fix: When generating a new test suite in the 'Record' page, one has the option to 
  specify the test suite name. However, changing the name in the dialog had no effect:
  the default name would always be used. Now if the user changes the name, that new name 
  is used.

v1.12.1 (30 March 2026)
-----------------------
* Bug fix: pipelines that were shown in the 'Raw XML' tab of the pipeline editor, were
  read from file using the default encoding, which lead to display errors if the
  file contained non-ASCII characters and the default encoding was not UTF08. 
  Now pipelines are read from file using UTF-8.

v1.13.0 (23 August 2026)
------------------------
* Feature: Inline data generation: It is now possible to generate inline-data in a pipeline
  using the functionality of the DataFaker library (1.9.0).
* Feature: Test suite parameters: It is now possible to extract values from a pipeline and
  use it as a parameter in a subsequent test case. This allows for test suites that test 
  a scenario, rather than variations of a single service.
* Enhancement: stubs can now be disabled in a test case definition.
* Enhancement: when copying a test case, you now have the option to copy only
  the definition, so without generating a new test case by rerunning the service and 
  capturing inputs, outputs and possibly stubbed services.
* Enhancement: when a pipeline cannot be edited in the JSON-editor because of duplicate
  keys or unsupported data types, then the exact fields involved are now indicated.
* Enhancement: adapter exception 'com.wm.pkg.art.error.DetailedServiceException' can now
  be instantiated. The pipeline editor now provides sample data for this type of
  exceptions.
* Enhancement: in the 'Test Suites' page there is now a section with warnings, if there
  are two different test suites *services* that define the same test suite *name* 
  (but with otherwise different test case names).
* Enhancement: in the 'Test Suites' page there is now a section with errors, if there
  are two different test suite *services* that define the same test suite *name*
  *and* have one or more test cases with the same name.
* Enhancement: on the 'Test Suites' page there is now a list of the five last edited test
  suite services.
* Enhancement: on the 'Results' page there is now a section with skipped test cases (if
  there are any)
* Enhancement:  upgraded to JSONEditor 10.4.2 
* Bug fix: The 'record.recordings.max' and the 'record.sample.interval.ms' parameters was
  ignored if a service had sub-services configured for recording. Now the uppper limit and
  the minimum are always observed.


