package Ġtest . unit . services . token Ċ Ċ import Ġframework . models . id Value Ċ import Ġio . kot lint est . Description Ċ import Ġio . kot lint est . TestResult Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . specs . Word Spec Ċ import Ġio . mock k . junit 5 . Mock K Extension Ċ import Ġkotlin serverless . framework . models . Handler Ċ import Ġkotlin serverless . framework . services . SO A Result Type Ċ import Ġmain . da os .* Ċ import Ġmain . services . token . Generate Token Service Ċ import Ġmain . services . token . Transfer Token Service Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġtest . TestHelper Ċ Ċ @ Extend With ( Mock K Extension :: class ) Ċ class ĠTransfer Token Service Test Ġ: ĠWord Spec () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġn Cent Token Namespace : ĠToken Namespace ĊĊĠĠĠ Ġoverride Ġfun Ġbefore Test ( description : ĠDescription ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler . connect And Build Tables () ĊĠĠĠĠĠĠĠ Ġn Cent Token Namespace Ġ= ĠToken Namespace ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠTokenType Namespace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" n Cent ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Token Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Token Conversion Rate Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter Test ( description : ĠDescription , Ġresult : ĠTest Result ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler . disconnect And Drop Tables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ" calling Ġexecute Ġwith Ġa Ġuser Ġtransfer , Ġhaving Ġsufficient Ġfunds " Ġshould Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" return Ġthe Ġtransaction Ġgenerated " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Accounts Ġ= ĠTest Helper . generate User Accounts ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Account Ġ= Ġnew User Accounts [ 0 ]. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Account 2 Ġ= Ġnew User Accounts [ 1 ]. value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠGenerate Token Service . execute ( new User Account , Ġn Cent Token Namespace ). data !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠTransfer Token Service . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew User Account . crypto KeyPair . publicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew User Account 2 . crypto KeyPair . publicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" n Cent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . result ĠshouldBe ĠSO A Result Type . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Ġ= Ġresult . data Ġas ĠTransaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . from ĠshouldBe Ġnew User Account . crypto KeyPair . publicKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . to ĠshouldBe Ġnew User Account 2 . crypto KeyPair . publicKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . action . type ĠshouldBe ĠAction Type . TRANSFER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . action . dataType ĠshouldBe ĠToken :: class . simple Name !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . action . data ĠshouldBe Ġtoken . id Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . met adat as . first (). value ĠshouldBe Ġ" 5 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" calling Ġexecute Ġwith Ġa Ġuser Ġtransfer , Ġhaving Ġins ufficient Ġfunds " Ġshould Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" return Ġfailure " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Accounts Ġ= ĠTest Helper . generate User Accounts ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Account Ġ= Ġnew User Accounts [ 0 ]. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Account 2 Ġ= Ġnew User Accounts [ 1 ]. value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGenerate Token Service . execute ( new User Account , Ġn Cent Token Namespace ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠTransfer Token Service . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew User Account . crypto KeyPair . publicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew User Account 2 . crypto KeyPair . publicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 5 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" n Cent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . result ĠshouldBe ĠSO A Result Type . FAILURE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . message ĠshouldBe Ġ" Ins ufficient Ġfunds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }