|
3914 | 3914 | bIds.append( poService.insertData( objectName="object_b", data={ label="b 2", lots_of_a="#aIds[2]#" }, insertManyToManyRecords=true ) ); |
3915 | 3915 | cIds.append( poService.insertData( objectName="object_c", data={ label="c 1", obj_b=bIds[1] } ) ); |
3916 | 3916 | cIds.append( poService.insertData( objectName="object_c", data={ label="c 2", obj_b=bIds[2] } ) ); |
3917 | | - |
| 3917 | + |
3918 | 3918 | var queryA = poService.selectData( |
3919 | 3919 | objectName = "object_a" |
3920 | 3920 | , filter = { label = "a 1" } |
3921 | | - , selectFields = [ "id" ] |
| 3921 | + , selectFields = [ "id" ] |
3922 | 3922 | , getSqlAndParamsOnly = true |
3923 | 3923 | , formatSqlParams = true |
3924 | 3924 | ); |
|
3929 | 3929 | , extraFilters = [ { |
3930 | 3930 | filter = sqlRunner.obfuscateSqlForPreside( "exists (#queryA.sql#) " ) |
3931 | 3931 | } ] |
3932 | | - , selectFields = [ "id" ] |
| 3932 | + , selectFields = [ "id" ] |
3933 | 3933 | , getSqlAndParamsOnly = true |
3934 | 3934 | , formatSqlParams = true |
3935 | 3935 | ); |
3936 | 3936 |
|
3937 | 3937 | var params = queryA.params; |
3938 | 3938 | StructAppend( params, queryB.params, true ); |
3939 | | - |
| 3939 | + |
3940 | 3940 | var queryWithParams = poService.selectData( |
3941 | 3941 | objectName = "object_c" |
3942 | 3942 | , selectFields = [ "id" ] |
|
3952 | 3952 | </cfscript> |
3953 | 3953 | </cffunction> |
3954 | 3954 |
|
| 3955 | + <cffunction name="test111_selectData_shouldWorkWithDeepNestedSelectDataViews" returntype="void"> |
| 3956 | + <cfscript> |
| 3957 | + var poService = _getService( |
| 3958 | + objectDirectories = [ "/tests/resources/PresideObjectService/objectsWithNestedSelectDataViews" ] |
| 3959 | + , delayInit = true |
| 3960 | + ); |
| 3961 | + var sqlRunner = CreateMock( object=new preside.system.services.database.SqlRunner( |
| 3962 | + logger = _getTestLogger() |
| 3963 | + ) ); |
| 3964 | + |
| 3965 | + mockSelectDataViewService.$( "getViewArgs", { |
| 3966 | + objectname = "object_d" |
| 3967 | + , selectFields = [ "object_c", "sum( value ) as total_value" ] |
| 3968 | + , groupBy = "object_c" |
| 3969 | + } ); |
| 3970 | + mockSelectDataViewService.$( "$getPresideObjectService", poService ); |
| 3971 | + poService.postInit(); |
| 3972 | + |
| 3973 | + var aIds = []; |
| 3974 | + var bIds = []; |
| 3975 | + var cIds = []; |
| 3976 | + var dIds = []; |
| 3977 | + |
| 3978 | + poService.dbSync(); |
| 3979 | + |
| 3980 | + ArrayAppend( aIds, poService.insertData( objectName="object_a", data={ label="a 1" } ) ); |
| 3981 | + ArrayAppend( aIds, poService.insertData( objectName="object_a", data={ label="a 2" } ) ); |
| 3982 | + ArrayAppend( aIds, poService.insertData( objectName="object_a", data={ label="a 3" } ) ); |
| 3983 | + ArrayAppend( bIds, poService.insertData( objectName="object_b", data={ label="b 1", object_a=aIds[1] } ) ); |
| 3984 | + ArrayAppend( bIds, poService.insertData( objectName="object_b", data={ label="b 2", object_a=aIds[2] } ) ); |
| 3985 | + ArrayAppend( bIds, poService.insertData( objectName="object_b", data={ label="b 3", object_a=aIds[3] } ) ); |
| 3986 | + ArrayAppend( cIds, poService.insertData( objectName="object_c", data={ label="c 1", object_b=bIds[1] } ) ); |
| 3987 | + ArrayAppend( cIds, poService.insertData( objectName="object_c", data={ label="c 2", object_b=bIds[2] } ) ); |
| 3988 | + ArrayAppend( cIds, poService.insertData( objectName="object_c", data={ label="c 3", object_b=bIds[3] } ) ); |
| 3989 | + ArrayAppend( cIds, poService.insertData( objectName="object_c", data={ label="c 4", object_b=bIds[3] } ) ); |
| 3990 | + |
| 3991 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 1", object_c=cIds[1], value=5 } ) ); |
| 3992 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 2", object_c=cIds[1], value=9 } ) ); |
| 3993 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 3", object_c=cIds[2], value=8 } ) ); |
| 3994 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 4", object_c=cIds[2], value=4 } ) ); |
| 3995 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 5", object_c=cIds[3], value=3 } ) ); |
| 3996 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 6", object_c=cIds[3], value=1 } ) ); |
| 3997 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 7", object_c=cIds[4], value=15 } ) ); |
| 3998 | + ArrayAppend( dIds, poService.insertData( objectName="object_d", data={ label="d 8", object_c=cIds[4], value=10 } ) ); |
| 3999 | + |
| 4000 | + var queryA = poService.selectData( |
| 4001 | + objectName = "object_a" |
| 4002 | + , selectFields = [ "object_a.label", "object_bs$object_cs$object_ds.total_value" ] |
| 4003 | + , filter = { "object_a.id" = aIds[1] } |
| 4004 | + ); |
| 4005 | + |
| 4006 | + var queryB = poService.selectData( |
| 4007 | + objectName = "object_a" |
| 4008 | + , selectFields = [ "object_a.label", "object_bs$object_cs$object_ds.total_value" ] |
| 4009 | + , filter = { "object_a.id" = aIds[2] } |
| 4010 | + ); |
| 4011 | + |
| 4012 | + var queryC = poService.selectData( |
| 4013 | + objectName = "object_a" |
| 4014 | + , selectFields = [ "object_a.label", "object_bs$object_cs$object_ds.total_value" ] |
| 4015 | + , filter = { "object_a.id" = aIds[3] } |
| 4016 | + ); |
| 4017 | + |
| 4018 | + super.assertEquals( queryA.total_value, 14, "Expected total value mismatch" ); |
| 4019 | + super.assertEquals( queryB.total_value, 12, "Expected total value mismatch" ); |
| 4020 | + super.assertEquals( queryC.recordCount, 2, "Expected record count mismatch" ); |
| 4021 | + super.assertEquals( ArraySum( QueryColumnData( queryC, "total_value" ) ), 29, "Expected total value mismatch" ); |
| 4022 | + </cfscript> |
| 4023 | + </cffunction> |
| 4024 | + |
3955 | 4025 | <!--- private helpers ---> |
3956 | 4026 | <cffunction name="_getService" access="private" returntype="any" output="false"> |
3957 | 4027 | <cfargument name="objectDirectories" type="array" required="true" /> |
3958 | 4028 | <cfargument name="defaultPrefix" type="string" required="false" default="ptest_" /> |
3959 | 4029 | <cfargument name="throwOnLongTableName" type="boolean" required="false" /> |
| 4030 | + <cfargument name="delayInit" type="boolean" required="false" /> |
3960 | 4031 |
|
3961 | 4032 | <cfscript> |
3962 | 4033 | cachebox = _getCachebox( forceNewInstance = true ); |
3963 | 4034 | mockColdbox = getMockbox().createEmptyMock( "preside.system.coldboxModifications.Controller" ); |
3964 | 4035 | mockColdboxEvent = getMockbox().createStub(); |
3965 | 4036 | mockInterceptorService = _getMockInterceptorService(); |
3966 | | - mockSelectDataViewService = getMockbox().createEmptyMock( "preside.system.services.presideObjects.PresideObjectSelectDataViewService" ); |
| 4037 | + |
| 4038 | + var selectDataViewService = new preside.system.services.presideObjects.PresideObjectSelectDataViewService(); |
| 4039 | + mockSelectDataViewService = getMockbox().prepareMock( selectDataViewService ); |
3967 | 4040 |
|
3968 | 4041 | mockColdboxEvent.$( "isAdminUser", true ); |
3969 | 4042 | mockColdboxEvent.$( "getAdminUserId", "" ); |
|
3978 | 4051 | , interceptorService = mockInterceptorService |
3979 | 4052 | , selectDataViewService = mockSelectDataViewService |
3980 | 4053 | , throwOnLongTableName = arguments.throwOnLongTableName ?: false |
| 4054 | + , delayInit = arguments.delayInit |
3981 | 4055 | ) |
3982 | 4056 | </cfscript> |
3983 | 4057 | </cffunction> |
|
0 commit comments