From 900cabb9f3d93ebd482d183048967acf641b1388 Mon Sep 17 00:00:00 2001 From: Dave L Date: Mon, 20 Jun 2022 11:53:03 -0700 Subject: [PATCH 01/13] Updated Missing Action Response Code to 404 instead of 405 I believe the intent of this method is to show that a particular handler action is missing which feels more like a 404 not found error. 405 (NOT_ALLOWED) is more appropriate for invalid HTTP actions. --- system/RestHandler.cfc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/RestHandler.cfc b/system/RestHandler.cfc index 6ba151483..0cbebbf3e 100644 --- a/system/RestHandler.cfc +++ b/system/RestHandler.cfc @@ -363,7 +363,7 @@ component extends="EventHandler" { .getResponse() .setError( true ) .addMessage( "Action '#arguments.missingAction#' could not be found" ) - .setStatusCode( arguments.event.STATUS.NOT_ALLOWED ) + .setStatusCode( arguments.event.STATUS.NOT_FOUND ) .setStatusText( "Invalid Action" ); // Render Error Out From b073feee8e3b019d74fc8253a5c716c55c4807ee Mon Sep 17 00:00:00 2001 From: homestar9 Date: Mon, 20 Jun 2022 18:54:17 +0000 Subject: [PATCH 02/13] Apply cfformat changes --- system/async/tasks/ScheduledTask.cfc | 8 +++++-- system/async/time/ChronoUnit.cfc | 34 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/system/async/tasks/ScheduledTask.cfc b/system/async/tasks/ScheduledTask.cfc index 85ef8c0e4..6f22326b0 100644 --- a/system/async/tasks/ScheduledTask.cfc +++ b/system/async/tasks/ScheduledTask.cfc @@ -1250,7 +1250,9 @@ component accessors="true" { * @time The specific time using 24 hour format => HH:mm, defaults to 00:00 */ ScheduledTask function startOn( required date, string time = "00:00" ){ - variables.startOnDateTime = variables.chronoUnitHelper.parse( "#dateFormat( arguments.date, "yyyy-mm-dd" )#T#arguments.time#" ); + variables.startOnDateTime = variables.chronoUnitHelper.parse( + "#dateFormat( arguments.date, "yyyy-mm-dd" )#T#arguments.time#" + ); return this; } @@ -1261,7 +1263,9 @@ component accessors="true" { * @time The specific time using 24 hour format => HH:mm, defaults to 00:00 */ ScheduledTask function endOn( required date, string time = "00:00" ){ - variables.endOnDateTime = variables.chronoUnitHelper.parse( "#dateFormat( arguments.date, "yyyy-mm-dd" )#T#arguments.time#" ); + variables.endOnDateTime = variables.chronoUnitHelper.parse( + "#dateFormat( arguments.date, "yyyy-mm-dd" )#T#arguments.time#" + ); return this; } diff --git a/system/async/time/ChronoUnit.cfc b/system/async/time/ChronoUnit.cfc index f17734bc9..a1865e8a3 100644 --- a/system/async/time/ChronoUnit.cfc +++ b/system/async/time/ChronoUnit.cfc @@ -14,41 +14,41 @@ component singleton { this.ChronoField = createObject( "java", "java.time.temporal.ChronoField" ); // The java chrono unit we model - variables.jChronoUnit = createObject( "java", "java.time.temporal.ChronoUnit" ); + variables.jChronoUnit = createObject( "java", "java.time.temporal.ChronoUnit" ); // Java LocalDateTime class variables.jLocalDateTime = createObject( "java", "java.time.LocalDateTime" ); // Unit that represents the concept of a century. - this.CENTURIES = variables.jChronoUnit.CENTURIES; + this.CENTURIES = variables.jChronoUnit.CENTURIES; // Unit that represents the concept of a day. - this.DAYS = variables.jChronoUnit.DAYS; + this.DAYS = variables.jChronoUnit.DAYS; // Unit that represents the concept of a decade. - this.DECADES = variables.jChronoUnit.DECADES; + this.DECADES = variables.jChronoUnit.DECADES; // Unit that represents the concept of an era. - this.ERAS = variables.jChronoUnit.ERAS; + this.ERAS = variables.jChronoUnit.ERAS; // Artificial unit that represents the concept of forever. - this.FOREVER = variables.jChronoUnit.FOREVER; + this.FOREVER = variables.jChronoUnit.FOREVER; // Unit that represents the concept of half a day, as used in AM/PM. - this.HALF_DAYS = variables.jChronoUnit.HALF_DAYS; + this.HALF_DAYS = variables.jChronoUnit.HALF_DAYS; // Unit that represents the concept of an hour. - this.HOURS = variables.jChronoUnit.HOURS; + this.HOURS = variables.jChronoUnit.HOURS; // Unit that represents the concept of a microsecond. - this.MICROS = variables.jChronoUnit.MICROS; + this.MICROS = variables.jChronoUnit.MICROS; // Unit that represents the concept of a millennium. - this.MILLENNIA = variables.jChronoUnit.MILLENNIA; + this.MILLENNIA = variables.jChronoUnit.MILLENNIA; // Unit that represents the concept of a millisecond. - this.MILLIS = variables.jChronoUnit.MILLIS; + this.MILLIS = variables.jChronoUnit.MILLIS; // Unit that represents the concept of a minute. - this.MINUTES = variables.jChronoUnit.MINUTES; + this.MINUTES = variables.jChronoUnit.MINUTES; // Unit that represents the concept of a month. - this.MONTHS = variables.jChronoUnit.MONTHS; + this.MONTHS = variables.jChronoUnit.MONTHS; // Unit that represents the concept of a nanosecond, the smallest supported unit of time. - this.NANOS = variables.jChronoUnit.NANOS; + this.NANOS = variables.jChronoUnit.NANOS; // Unit that represents the concept of a second. - this.SECONDS = variables.jChronoUnit.SECONDS; + this.SECONDS = variables.jChronoUnit.SECONDS; // Unit that represents the concept of a week. - this.WEEKS = variables.jChronoUnit.WEEKS; + this.WEEKS = variables.jChronoUnit.WEEKS; // Unit that represents the concept of a year. - this.YEARS = variables.jChronoUnit.YEARS; + this.YEARS = variables.jChronoUnit.YEARS; /** * Convert any ColdFusion date/time or string date/time object to a Java instant temporal object From 3a42a2d08a6b71798f56e69c589cd933cc543b98 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Tue, 21 Jun 2022 16:35:09 -0500 Subject: [PATCH 03/13] version bump --- box.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/box.json b/box.json index 0cfcae80b..d7e9b558e 100644 --- a/box.json +++ b/box.json @@ -1,6 +1,6 @@ { "name":"ColdBox Platform", - "version":"6.7.0", + "version":"6.8.0", "location":"https://downloads.ortussolutions.com/ortussolutions/coldbox/@build.version@/coldbox-@build.version@.zip", "author":"Ortus Solutions ", "slug":"coldbox", From f4708464b9bcb8610636f09147d79dbe2e15b4b4 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Tue, 21 Jun 2022 17:18:42 -0500 Subject: [PATCH 04/13] adding github release build action --- .github/workflows/gh-release.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/gh-release.yml diff --git a/.github/workflows/gh-release.yml b/.github/workflows/gh-release.yml new file mode 100644 index 000000000..5193ae57c --- /dev/null +++ b/.github/workflows/gh-release.yml @@ -0,0 +1,19 @@ +# Publish Github Release +name: Github Release + +on: + push: + tags: + - v[0-9]+.* + +jobs: + create-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: taiki-e/create-gh-release-action@v1.5.0 + with: + # Produced by the build/Build.cfc + changelog: changelog.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 89cf34c3de7b586e012f1e69c01ef39fbb93c905 Mon Sep 17 00:00:00 2001 From: John Bampton Date: Sat, 25 Jun 2022 07:52:09 +1000 Subject: [PATCH 05/13] Fix case of `CFML` in `README` cfml -> CFML --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index b2e85cddb..547fe507f 100755 --- a/readme.md +++ b/readme.md @@ -126,7 +126,7 @@ Bleeding edge releases are updated automatically when code is committed. First, read our [contributing](CONTRIBUTING.md) guidelines, then you will need to download [CommandBox](https://www.ortussolutions.com/products/commandbox) so you can install dependencies, run the development server and much more. -Then you need to install some CommandBox modules in order to work with environment variables and cfml engine configuration. Once you fork/clone the repository, startup a CommandBox shell in the root of the project via `box` and then install all of the project development dependencies: +Then you need to install some CommandBox modules in order to work with environment variables and CFML engine configuration. Once you fork/clone the repository, startup a CommandBox shell in the root of the project via `box` and then install all of the project development dependencies: ```bash install From 2c31ced1cb8fd15e4b29e600c47a281912b42a85 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Mon, 27 Jun 2022 09:29:24 -0500 Subject: [PATCH 06/13] COLDBOX-1130 #resolve New config/ColdBox.cfc global injections: webMapping, coldboxVersion --- system/web/config/ApplicationLoader.cfc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/system/web/config/ApplicationLoader.cfc b/system/web/config/ApplicationLoader.cfc index efb1c520b..6175de522 100644 --- a/system/web/config/ApplicationLoader.cfc +++ b/system/web/config/ApplicationLoader.cfc @@ -89,6 +89,8 @@ component accessors="true" { .injectPropertyMixin( "controller", variables.controller ) .injectPropertyMixin( "logBoxConfig", variables.controller.getLogBox().getConfig() ) .injectPropertyMixin( "appMapping", configStruct.appMapping ) + .injectPropertyMixin( "webMapping", configStruct.webMapping ) + .injectPropertyMixin( "coldboxVersion", coldboxSettings.version ) .injectPropertyMixin( "getJavaSystem", variables.util.getJavaSystem ) .injectPropertyMixin( "getSystemSetting", variables.util.getSystemSetting ) .injectPropertyMixin( "getSystemProperty", variables.util.getSystemProperty ) From 4ab822ed948430b416c7a2fdc28cd0ca50f19013 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Thu, 30 Jun 2022 11:14:38 -0500 Subject: [PATCH 07/13] COLDBOX-1132 #resolve New virtual app was always starting up the virtual coldbox app instead of checking if it was running already --- system/testing/VirtualApp.cfc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/system/testing/VirtualApp.cfc b/system/testing/VirtualApp.cfc index bc460993c..89ce33e2b 100644 --- a/system/testing/VirtualApp.cfc +++ b/system/testing/VirtualApp.cfc @@ -49,9 +49,16 @@ component accessors="true" { /** * Startup a virtual ColdBox application for integration testing purposes. * + * @force Force the startup of the application even if found. Default is false + * * @return The loaded Application controller */ - function startup(){ + function startup( boolean force = false ){ + // Return back if it's already running and not forcing + if( isRunning() && !arguments.force ){ + return application.cbController; + } + // Initialize mock Controller application.cbController = new coldbox.system.testing.mock.web.MockController( appRootPath = variables.appRootPath, @@ -87,6 +94,14 @@ component accessors="true" { return !isNull( application.cbController ); } + /** + * Get the running application controller. Null if not in scope! + * + */ + function getController(){ + return isRunning() ? application.cbController : javaCast( "null", "" ); + } + /** * Shuts down a virtual ColdBox application. * It expects the
cbController
to be the app by convention. From 283d3dee98421dca0a7bf0fa0f6987876ae8c6e6 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Fri, 8 Jul 2022 11:58:38 -0600 Subject: [PATCH 08/13] COLDBOX-1134 #resolve Router closure responses not marshalling complex content to json --- system/web/services/RoutingService.cfc | 1 + 1 file changed, 1 insertion(+) diff --git a/system/web/services/RoutingService.cfc b/system/web/services/RoutingService.cfc index 4166c48ee..8bb4396cd 100644 --- a/system/web/services/RoutingService.cfc +++ b/system/web/services/RoutingService.cfc @@ -792,6 +792,7 @@ component extends="coldbox.system.web.services.BaseService" accessors="true" { // render it out event .renderdata( + type = isSimpleValue( theResponse ) ? "HTML" : "JSON", data = theResponse, statusCode = aRoute.statusCode, statusText = aRoute.statusText From 64315c97eeb17845cc506c4bd63cf814e4712736 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Fri, 8 Jul 2022 12:38:34 -0600 Subject: [PATCH 09/13] missingAction is 404 not 405 --- tests/specs/RestHandlerTest.cfc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/specs/RestHandlerTest.cfc b/tests/specs/RestHandlerTest.cfc index 413b71a2d..60f12a32e 100644 --- a/tests/specs/RestHandlerTest.cfc +++ b/tests/specs/RestHandlerTest.cfc @@ -151,7 +151,7 @@ component extends="coldbox.system.testing.BaseModelTest" { var response = mockRequestContext.getResponse(); expect( response.getError() ).toBeTrue(); expect( response.getStatusText() ).toBe( "Invalid Action" ); - expect( response.getStatusCode() ).toBe( 405 ); + expect( response.getStatusCode() ).toBe( 404 ); } ); it( "can handle onInvalidHTTPMethod", function(){ From f777a8c2d315cff34da99f08cee20962d470b2bd Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Fri, 8 Jul 2022 14:56:21 -0600 Subject: [PATCH 10/13] COLDBOX-1127 #resolve All core async proxies should send exceptions to the error log --- system/async/proxies/BiConsumer.cfc | 5 +++++ system/async/proxies/BiFunction.cfc | 5 +++++ system/async/proxies/Callable.cfc | 5 +++++ system/async/proxies/Consumer.cfc | 9 ++++++++- system/async/proxies/Function.cfc | 5 +++++ system/async/proxies/FutureFunction.cfc | 5 +++++ system/async/proxies/Runnable.cfc | 5 +++++ system/async/proxies/Supplier.cfc | 9 ++++++++- 8 files changed, 46 insertions(+), 2 deletions(-) diff --git a/system/async/proxies/BiConsumer.cfc b/system/async/proxies/BiConsumer.cfc index 04af4d9de..28df74505 100644 --- a/system/async/proxies/BiConsumer.cfc +++ b/system/async/proxies/BiConsumer.cfc @@ -24,6 +24,11 @@ component extends="BaseProxy" { lock name="#getConcurrentEngineLockName()#" type="exclusive" timeout="60" { variables.target( arguments.t, arguments.u ); } + } catch ( any e ) { + // Log it, so it doesn't go to ether + err( "Error running BiConsumer: #e.message & e.detail#" ); + err( "Stacktrace for BiConsumer: #e.stackTrace#" ); + rethrow; } finally { unLoadContext(); } diff --git a/system/async/proxies/BiFunction.cfc b/system/async/proxies/BiFunction.cfc index f2d3b9a16..f98254c7c 100644 --- a/system/async/proxies/BiFunction.cfc +++ b/system/async/proxies/BiFunction.cfc @@ -27,6 +27,11 @@ component extends="BaseProxy" { isNull( arguments.u ) ? javacast( "null", "" ) : arguments.u ); } + } catch ( any e ) { + // Log it, so it doesn't go to ether + err( "Error running BiFunction: #e.message & e.detail#" ); + err( "Stacktrace for BiFunction: #e.stackTrace#" ); + rethrow; } finally { unLoadContext(); } diff --git a/system/async/proxies/Callable.cfc b/system/async/proxies/Callable.cfc index 4eb3652a0..39134c885 100644 --- a/system/async/proxies/Callable.cfc +++ b/system/async/proxies/Callable.cfc @@ -14,6 +14,11 @@ component extends="Supplier" { return invoke( variables.target, variables.method ); } } + } catch ( any e ) { + // Log it, so it doesn't go to ether + err( "Error running Callable: #e.message & e.detail#" ); + err( "Stacktrace for Callable: #e.stackTrace#" ); + rethrow; } finally { unLoadContext(); } diff --git a/system/async/proxies/Consumer.cfc b/system/async/proxies/Consumer.cfc index 704ffc0ee..4239c782c 100644 --- a/system/async/proxies/Consumer.cfc +++ b/system/async/proxies/Consumer.cfc @@ -24,7 +24,14 @@ component extends="BaseProxy" { lock name="#getConcurrentEngineLockName()#" type="exclusive" timeout="60" { variables.target( arguments.t ); } - } finally { + } + catch( any e ){ + // Log it, so it doesn't go to ether + err( "Error running Consumer: #e.message & e.detail#" ); + err( "Stacktrace for Consumer: #e.stackTrace#" ); + rethrow; + } + finally { unLoadContext(); } } diff --git a/system/async/proxies/Function.cfc b/system/async/proxies/Function.cfc index 7b9d024d0..ac80deeb0 100644 --- a/system/async/proxies/Function.cfc +++ b/system/async/proxies/Function.cfc @@ -36,6 +36,11 @@ component extends="BaseProxy" { } return variables.target( arguments.t ); } + } catch ( any e ) { + // Log it, so it doesn't go to ether + err( "Error running Function: #e.message & e.detail#" ); + err( "Stacktrace for Function: #e.stackTrace#" ); + rethrow; } finally { unLoadContext(); } diff --git a/system/async/proxies/FutureFunction.cfc b/system/async/proxies/FutureFunction.cfc index 58f0c430f..09064dfcd 100644 --- a/system/async/proxies/FutureFunction.cfc +++ b/system/async/proxies/FutureFunction.cfc @@ -22,6 +22,11 @@ component extends="Function" { } return local.oFuture.getNative(); } + } catch ( any e ) { + // Log it, so it doesn't go to ether + err( "Error running FutureFunction: #e.message & e.detail#" ); + err( "Stacktrace for FutureFunction: #e.stackTrace#" ); + rethrow; } finally { unLoadContext(); } diff --git a/system/async/proxies/Runnable.cfc b/system/async/proxies/Runnable.cfc index 1fc3d0c12..909ec57de 100644 --- a/system/async/proxies/Runnable.cfc +++ b/system/async/proxies/Runnable.cfc @@ -37,6 +37,11 @@ component extends="BaseProxy" { invoke( variables.target, variables.method ); } } + } catch ( any e ) { + // Log it, so it doesn't go to ether + err( "Error running runnable: #e.message & e.detail#" ); + err( "Stacktrace for runnable: #e.stackTrace#" ); + rethrow; } finally { unLoadContext(); } diff --git a/system/async/proxies/Supplier.cfc b/system/async/proxies/Supplier.cfc index 7340b888a..4d7fb02c5 100644 --- a/system/async/proxies/Supplier.cfc +++ b/system/async/proxies/Supplier.cfc @@ -37,7 +37,14 @@ component extends="BaseProxy" { return invoke( variables.target, variables.method ); } } - } finally { + } + catch( any e ){ + // Log it, so it doesn't go to ether + err( "Error running Supplier: #e.message & e.detail#" ); + err( "Stacktrace for Supplier: #e.stackTrace#" ); + rethrow; + } + finally { unLoadContext(); } } From 4e90c1c70571687e37f66ecbdabddc527c1dc55c Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Fri, 8 Jul 2022 14:59:16 -0600 Subject: [PATCH 11/13] COLDBOX-1126 #resolve Funnel all out and err logging on a ColdBox Scheduled Task to LogBox --- system/web/tasks/ColdBoxScheduledTask.cfc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/system/web/tasks/ColdBoxScheduledTask.cfc b/system/web/tasks/ColdBoxScheduledTask.cfc index 581fc6232..457bd7219 100644 --- a/system/web/tasks/ColdBoxScheduledTask.cfc +++ b/system/web/tasks/ColdBoxScheduledTask.cfc @@ -222,4 +222,24 @@ component extends="coldbox.system.async.tasks.ScheduledTask" accessors="true" { return variables.cachebox.getCache( variables.cacheName ); } + /** + * Send info messages to LogBox + * + * @var Variable/Message to send + */ + ScheduledTask function out( required var ){ + variables.log.info( arguments.var.toString() ); + return this; + } + + /** + * Send errors to LogBox + * + * @var Variable/Message to send + */ + ScheduledTask function err( required var ){ + variables.log.error( arguments.var.toString() ); + return this; + } + } From bd964aa59af0ab4ee7592b7410a4245ed96df673 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Sat, 23 Jul 2022 10:38:14 -0500 Subject: [PATCH 12/13] COLDBOX-1135 #resolve Remove HandlerTestCase as it is no longer in usage. --- system/testing/BaseHandlerTest.cfc | 73 ------------------- .../external/testHandlers/ehTestTest.cfc | 10 --- 2 files changed, 83 deletions(-) delete mode 100644 system/testing/BaseHandlerTest.cfc delete mode 100755 test-harness/external/testHandlers/ehTestTest.cfc diff --git a/system/testing/BaseHandlerTest.cfc b/system/testing/BaseHandlerTest.cfc deleted file mode 100644 index 7e9f328f6..000000000 --- a/system/testing/BaseHandlerTest.cfc +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright Since 2005 ColdBox Framework by Luis Majano and Ortus Solutions, Corp - * www.ortussolutions.com - * --- - * Standalone base test case for handlers - */ -component extends="coldbox.system.testing.BaseTestCase" { - - this.loadColdbox = false; - - function setup(){ - var md = getMetadata( this ); - var mockBox = getMockBox(); - var applicationHelper = []; - - // Check for handler path else throw exception - if ( NOT structKeyExists( md, "handler" ) ) { - throw( - "handler annotation not found on component tag", - "Please declare a 'handler=path' annotation", - "BaseHandlerTest.InvalidStateException" - ); - } - // Check for applicationHelper - if ( structKeyExists( md, "applicationHelper" ) ) { - // inflate it, since it can't be an array in metadata - applicationHelper = listToArray( md.applicationHelper ); - } - - // Create handler with Mocking capabilities - variables.handler = mockBox.createMock( md.handler ); - - // Create Mock Objects - variables.mockController = mockBox.createMock( "coldbox.system.testing.mock.web.MockController" ); - variables.mockRequestContext = getMockRequestContext(); - variables.mockRequestService = mockBox - .createEmptyMock( "coldbox.system.web.services.RequestService" ) - .$( "getContext", variables.mockRequestContext ); - variables.mockLogBox = mockBox.createEmptyMock( "coldbox.system.logging.LogBox" ); - variables.mockLogger = mockBox.createEmptyMock( "coldbox.system.logging.Logger" ); - variables.mockFlash = mockBox.createMock( "coldbox.system.web.flash.MockFlash" ).init( mockController ); - variables.mockCacheBox = mockBox.createEmptyMock( "coldbox.system.cache.CacheFactory" ); - variables.mockWireBox = mockBox.createEmptyMock( "coldbox.system.ioc.Injector" ); - - // Mock Handler Dependencies - variables.mockController - .$( "getLogBox", variables.mockLogBox ) - .$( "getRequestService", variables.mockRequestService ) - .$( "getSetting" ) - .$args( "applicationHelper" ) - .$results( applicationHelper ) - .$( "getSetting" ) - .$args( "AppMapping" ) - .$results( "/" ); - - mockController.setLogBox( mockLogBox ); - mockController.setWireBox( mockWireBox ); - mockController.setCacheBox( mockCacheBox ); - - variables.mockRequestService.$( "getFlashScope", variables.mockFlash ); - variables.mockLogBox.$( "getLogger", variables.mockLogger ); - - // Decorate handler? - if ( NOT getUtil().isFamilyType( "handler", variables.handler ) ) { - getUtil().convertToColdBox( "handler", variables.handler ); - // Check if doing cbInit() - if ( structKeyExists( variables.handler, "$cbInit" ) ) { - variables.handler.$cbInit( mockController ); - } - } - } - -} diff --git a/test-harness/external/testHandlers/ehTestTest.cfc b/test-harness/external/testHandlers/ehTestTest.cfc deleted file mode 100755 index c7d27eb16..000000000 --- a/test-harness/external/testHandlers/ehTestTest.cfc +++ /dev/null @@ -1,10 +0,0 @@ - - - function setup(){ - super.setup(); - } - function testdspExternal(){ - handler.dspExternal( mockRequestContext ); - } - - From 9179e4092a3cfced9e6d499d306f6a972cfa47d6 Mon Sep 17 00:00:00 2001 From: Luis Majano Date: Sat, 23 Jul 2022 10:42:37 -0500 Subject: [PATCH 13/13] finalized changelog --- changelog.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/changelog.md b/changelog.md index 17ac29b85..f450a4ab3 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ---- +## [6.8.0] => 2022-JUL-23 + +### ColdBox HMVC Core + +#### Bug + +* [COLDBOX-1134](https://ortussolutions.atlassian.net/browse/COLDBOX-1134) Router closure responses not marshalling complex content to json +* [COLDBOX-1132](https://ortussolutions.atlassian.net/browse/COLDBOX-1132) New virtual app was always starting up the virtual coldbox app instead of checking if it was running already + +#### Improvement + +* [COLDBOX-1131](https://ortussolutions.atlassian.net/browse/COLDBOX-1131) Updated Missing Action Response Code to 404 instead of 405 +* [COLDBOX-1127](https://ortussolutions.atlassian.net/browse/COLDBOX-1127) All core async proxies should send exceptions to the error log + +#### New Feature + +* [COLDBOX-1130](https://ortussolutions.atlassian.net/browse/COLDBOX-1130) New config/ColdBox.cfc global injections: webMapping, coldboxVersion +* [COLDBOX-1126](https://ortussolutions.atlassian.net/browse/COLDBOX-1126) Funnel all out and err logging on a ColdBox Scheduled Task to LogBox + +#### Task + +* [COLDBOX-1135](https://ortussolutions.atlassian.net/browse/COLDBOX-1135) Remove HandlerTestCase as it is no longer in usage. + +---- + ## [6.7.0] => 2022-JUN-22 ### ColdBox HMVC Core