/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . springframework . data . convert Ċ Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . assertThat Thrown By Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . data . annotation . Persistence Constructor Ċ import Ġorg . springframework . data . mapping . Persistent Entity Ċ import Ġorg . springframework . data . mapping . context . Sample Persistent Property Ċ import Ġorg . springframework . data . mapping . model . Mapping Instantiation Exception Ċ import Ġorg . springframework . data . mapping . model . Parameter Value Provider Ċ import Ġorg . springframework . data . mapping . model . Preferred Constructor Discover er Ċ Ċ /** Ċ Ġ* ĠUnit Ġtests Ġfor Ġ[ Kotlin Class Generating Entity Instanti ator ] Ġcreating Ġinstances Ġusing ĠKotlin Ġdata Ġclasses . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark ĠPal uch Ċ Ġ* Ġ@ author ĠSeb ast ien ĠDe le u ze Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠKotlin Class Generating Entity Instanti ator UnitTests Ġ{ ĊĊ ĉ val Ġprovider Ġ= Ġmock k < Parameter Value Provider < Sample Persistent Property >>() ĊĊ ĉ @ Test Ġ// ĠDAT ACM NS - 1 1 2 6 Ċ ĉ fun Ġ` should Ġcreate Ġinstance `() Ġ{ ĊĊĉ ĉ val Ġentity Ġ= Ġmock k < Persistent Entity < Contact , ĠSample Persistent Property >>() Ċĉ ĉ val Ġconstructor Ġ= ĠP referred Constructor Discover er . discover < Contact , ĠSample Persistent Property >( Contact :: class . java ) ĊĊĉ ĉ every Ġ{ Ġprovider . getParameter Value < String >( any ()) Ġ}. returns Many (" W alter ", Ġ" White ") Ċĉ ĉ every Ġ{ Ġentity . persistence Constructor Ġ} Ġreturns Ġconstructor Ċĉ ĉ every Ġ{ Ġentity . type Ġ} Ġreturns Ġconstructor . constructor . decl aring Class Ċĉ ĉ every Ġ{ Ġentity . type Information Ġ} Ġreturns Ġmock k () ĊĊĉ ĉ val Ġinstance : ĠContact Ġ= ĠKotlin Class Generating Entity Instanti ator (). create Instance ( entity , Ġprovider ) ĊĊĉ ĉ assertThat ( instance . firstname ). isEqualTo (" W alter ") Ċĉ ĉ assertThat ( instance . lastname ). isEqualTo (" White ") Ċ ĉ } ĊĊ ĉ @ Test Ġ// ĠDAT ACM NS - 1 1 2 6 Ċ ĉ fun Ġ` should Ġcreate Ġinstance Ġand Ġfill Ġin Ġdefaults `() Ġ{ ĊĊĉ ĉ val Ġentity Ġ= Ġmock k < Persistent Entity < Contact WithDefault ing , ĠSample Persistent Property >>() Ċĉ ĉ val Ġconstructor Ġ= ĠP referred Constructor Discover er . discover < Contact WithDefault ing , ĠSample Persistent Property >( Contact WithDefault ing :: class . java ) ĊĊĉ ĉ every Ġ{ Ġprovider . getParameter Value < String >( any ()) Ġ}. returns Many ( Ċĉĉĉ ĉ " W alter ", Ġnull , Ġ" Sky ler ", Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġ/* Ġ 0 - 9 Ġ*/ Ċĉĉĉ ĉ null , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġ/* Ġ 1 0 - 1 9 Ġ*/ Ċĉĉĉ ĉ null , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġ/* Ġ 2 0 - 2 9 Ġ*/ Ċĉĉĉ ĉ null , Ġ" W alter ", Ġnull , Ġ" Jun ior ", Ġnull ) ĊĊĉ ĉ every Ġ{ Ġentity . persistence Constructor Ġ} Ġreturns Ġconstructor Ċĉ ĉ every Ġ{ Ġentity . type Ġ} Ġreturns Ġconstructor . constructor . decl aring Class Ċĉ ĉ every Ġ{ Ġentity . type Information Ġ} Ġreturns Ġmock k () ĊĊĉ ĉ val Ġinstance : ĠContact WithDefault ing Ġ= ĠKotlin Class Generating Entity Instanti ator (). create Instance ( entity , Ġprovider ) ĊĊĉ ĉ assertThat ( instance . prop 0 ). isEqualTo (" W alter ") Ċĉ ĉ assertThat ( instance . prop 2 ). isEqualTo (" Sky ler ") Ċĉ ĉ assertThat ( instance . prop 3 1 ). isEqualTo (" W alter ") Ċĉ ĉ assertThat ( instance . prop 3 2 ). isEqualTo (" White ") Ċĉ ĉ assertThat ( instance . prop 3 3 ). isEqualTo (" Jun ior ") Ċĉ ĉ assertThat ( instance . prop 3 4 ). isEqualTo (" White ") Ċ ĉ } ĊĊ ĉ @ Test Ġ// ĠDAT ACM NS - 1 2 0 0 Ċ ĉ fun Ġ` abs ent Ġprimitive Ġvalue Ġshould Ġcause ĠMapping Instantiation Exception `() Ġ{ ĊĊĉ ĉ val Ġentity Ġ= Ġmock k < Persistent Entity < With Boolean , ĠSample Persistent Property >>() Ċĉ ĉ val Ġconstructor Ġ= ĠP referred Constructor Discover er . discover < With Boolean , ĠSample Persistent Property >( With Boolean :: class . java ) ĊĊĉ ĉ every Ġ{ Ġprovider . getParameter Value < Boolean >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġentity . persistence Constructor Ġ} Ġreturns Ġconstructor Ċĉ ĉ every Ġ{ Ġentity . type Ġ} Ġreturns Ġconstructor . constructor . decl aring Class Ċĉ ĉ every Ġ{ Ġentity . type Information Ġ} Ġreturns Ġmock k () ĊĊĉ ĉ assertThat Thrown By Ġ{ ĠKotlin Class Generating Entity Instanti ator (). create Instance ( entity , Ġprovider ) Ġ} Ġ// Ċĉĉĉ ĉ . isInstanceOf ( Mapping Instantiation Exception :: class . java ) Ġ// Ċĉĉĉ ĉ . has Message Containing (" fun Ġ< init >( kotlin . Boolean )") Ġ// Ċĉĉĉ ĉ . has Cause InstanceOf ( IllegalArgumentException :: class . java ) Ċ ĉ } ĊĊ ĉ @ Test Ġ// ĠDAT ACM NS - 1 2 0 0 Ċ ĉ fun Ġ` should Ġapply Ġprimitive Ġdefault ing Ġfor Ġabsent Ġparameters `() Ġ{ ĊĊĉ ĉ val Ġentity Ġ= Ġmock k < Persistent Entity < With Primitive Default ing , ĠSample Persistent Property >>() Ċĉ ĉ val Ġconstructor Ġ= ĠP referred Constructor Discover er . discover < With Primitive Default ing , ĠSample Persistent Property >( With Primitive Default ing :: class . java ) ĊĊĉ ĉ every Ġ{ Ġprovider . getParameter Value < Byte >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Short >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Int >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Long >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Float >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Double >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Char >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġprovider . getParameter Value < Boolean >( any ()) Ġ} Ġreturns Ġnull Ċĉ ĉ every Ġ{ Ġentity . persistence Constructor Ġ} Ġreturns Ġconstructor Ċĉ ĉ every Ġ{ Ġentity . type Ġ} Ġreturns Ġconstructor . constructor . decl aring Class Ċĉ ĉ every Ġ{ Ġentity . type Information Ġ} Ġreturns Ġmock k () ĊĊĉ ĉ val Ġinstance : ĠWith Primitive Default ing Ġ= ĠKotlin Class Generating Entity Instanti ator (). create Instance ( entity , Ġprovider ) ĊĊĉ ĉ assertThat ( instance . a Byte ). isEqualTo ( 0 ) Ċĉ ĉ assertThat ( instance . a Short ). isEqualTo ( 0 ) Ċĉ ĉ assertThat ( instance . an Int ). isEqualTo ( 0 ) Ċĉ ĉ assertThat ( instance . a Long ). isEqualTo ( 0 L ) Ċĉ ĉ assertThat ( instance . a Float ). isEqualTo ( 0 . 0 f ) Ċĉ ĉ assertThat ( instance . a Double ). isEqualTo ( 0 . 0 ) Ċĉ ĉ assertThat ( instance . a Char ). isEqualTo (' a ') Ċĉ ĉ assertThat ( instance . a Bool ). isTrue () Ċ ĉ } ĊĊ ĉ @ Test Ġ// ĠDAT ACM NS - 1 3 3 8 Ċ ĉ fun Ġ` should Ġcreate Ġinstance Ġusing Ġ@ Persistence Constructor `() Ġ{ ĊĊĉ ĉ val Ġentity Ġ= Ġmock k < Persistent Entity < Custom User , ĠSample Persistent Property >>() Ċĉ ĉ val Ġconstructor Ġ= ĠP referred Constructor Discover er . discover < Custom User , ĠSample Persistent Property >( Custom User :: class . java ) ĊĊĉ ĉ every Ġ{ Ġprovider . getParameter Value < String >( any ()) Ġ} Ġreturns Ġ" W alter " Ċĉ ĉ every Ġ{ Ġentity . persistence Constructor Ġ} Ġreturns Ġconstructor Ċĉ ĉ every Ġ{ Ġentity . type Ġ} Ġreturns Ġconstructor . constructor . decl aring Class Ċĉ ĉ every Ġ{ Ġentity . type Information Ġ} Ġreturns Ġmock k () ĊĊĉ ĉ val Ġinstance : ĠCustom User Ġ= ĠKotlin Class Generating Entity Instanti ator (). create Instance ( entity , Ġprovider ) ĊĊĉ ĉ assertThat ( instance . id ). isEqualTo (" W alter ") Ċ ĉ } ĊĊ ĉ data Ġclass ĠContact ( val Ġfirst name : ĠString , Ġval Ġlastname : ĠString ) ĊĊ ĉ data Ġclass ĠContact WithDefault ing ( val Ġprop 0 : ĠString , Ġval Ġprop 1 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 : ĠString , Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 3 : ĠString Ġ= Ġ" White ", Ġval Ġprop 4 : ĠString Ġ= Ġ" White ", Ġval Ġprop 5 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 6 : ĠString Ġ= Ġ" White ", Ġval Ġprop 7 : ĠString Ġ= Ġ" White ", Ġval Ġprop 8 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 9 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 0 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 1 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 1 2 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 3 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 4 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 1 5 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 6 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 7 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 1 8 : ĠString Ġ= Ġ" White ", Ġval Ġprop 1 9 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 0 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 2 1 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 2 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 3 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 2 4 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 5 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 6 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 2 7 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 8 : ĠString Ġ= Ġ" White ", Ġval Ġprop 2 9 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 3 0 : ĠString Ġ= Ġ" White ", Ġval Ġprop 3 1 : ĠString Ġ= Ġ" White ", Ġval Ġprop 3 2 : ĠString Ġ= Ġ" White ", Ċĉĉĉĉĉĉĉĉĉ Ġval Ġprop 3 3 : ĠString , Ġval Ġprop 3 4 : ĠString Ġ= Ġ" White " Ċ ĉ ) ĊĊ ĉ data Ġclass ĠWith Boolean ( val Ġstate : ĠBoolean ) ĊĊ ĉ data Ġclass ĠWith Primitive Default ing ( val Ġa Byte : ĠByte Ġ= Ġ 0 , Ġval Ġa Short : ĠShort Ġ= Ġ 0 , Ġval Ġan Int : ĠInt Ġ= Ġ 0 , Ġval Ġa Long : ĠLong Ġ= Ġ 0 L , Ċĉĉĉĉĉĉĉĉĉ ĠĠ Ġval Ġa Float : ĠFloat Ġ= Ġ 0 . 0 f , Ġval Ġa Double : ĠDouble Ġ= Ġ 0 . 0 , Ġval Ġa Char : ĠChar Ġ= Ġ' a ', Ġval Ġa Bool : ĠBoolean Ġ= Ġtrue ) ĊĊ ĉ data Ġclass ĠContact With Persistence Constructor ( val Ġfirst name : ĠString , Ġval Ġlastname : ĠString ) Ġ{ ĊĊĉ ĉ @ Persistence Constructor Ċĉ ĉ constructor ( firstname : ĠString ) Ġ: Ġthis ( firstname , Ġ"") Ċ ĉ } ĊĊ ĉ data Ġclass ĠCustom User ( Ċĉĉ ĉ var Ġid : ĠString ? Ġ= Ġnull , ĊĊĉĉ ĉ var Ġorgan isations : ĠMutable List < Organ isation > Ġ= Ġmutable ListOf () Ċ ĉ ) Ġ{ Ċĉ ĉ @ Persistence Constructor Ċĉ ĉ constructor ( id : ĠString ?) Ġ: Ġthis ( id , Ġmutable ListOf ()) Ċ ĉ } ĊĊ ĉ data Ġclass ĠOrgan isation ( var Ġid : ĠString ? Ġ= Ġnull ) Ċ } ĊĊ