package Ġdev . dom nik l . schema _ registry _ git ops . state Ċ Ċ import Ġdev . dom nik l . schema _ registry _ git ops . Compatibility Ċ import Ġdev . dom nik l . schema _ registry _ git ops . Schema Registry Client Ċ import Ġdev . dom nik l . schema _ registry _ git ops . Subject Ċ import Ġdev . dom nik l . schema _ registry _ git ops . avro From Resources Ċ import Ġio . con fluent . kafka . sche m are gistry . Parsed Schema Ċ import Ġio . mock k . every Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . runs Ċ import Ġio . mock k . verify Ċ import Ġio . mock k . verify Order Ċ import Ġorg . junit . Assert . assert Throws Ċ import Ġorg . junit . Test Ċ import Ġorg . slf 4 j . Logger Ċ Ċ class ĠApp lier Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġclient Ġ= Ġmock k < Schema Registry Client >() ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġmock k < Logger >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġstate App lier Ġ= ĠApp lier ( client , Ġlogger ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` throws Ġexception Ġwhen Ġtrying Ġto Ġapply Ġwith Ġin compat ibilities `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġmock k < Parsed Schema >() ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠSubject (" foo ", Ġnull , Ġschema ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( in compatible Ġ= ĠlistOf ( subject )) ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalStateException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġapply Ġglobal Ġcompatibility `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . update Global Compatibility ( Compatibility . FULL _ TRANS ITIVE ) Ġ} Ġreturns ĠCompatibility . FULL _ TRANS ITIVE ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( compatibility Ġ= ĠDiff ing . Change ( Compatibility . FULL , ĠCompatibility . FULL _ TRANS ITIVE )) ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . update Global Compatibility ( Compatibility . FULL _ TRANS ITIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ GLOBAL ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġcompatibility ĠFULL Ġ-> ĠFULL _ TRANS ITIVE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` will Ġnot Ġchange Ġglobal Ġcompatibility Ġif Ġmatches Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result () ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġclient . update Global Compatibility ( Compatibility . FULL _ TRANS ITIVE ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġcreate Ġnew Ġsubject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġav ro From Resources (" schemas / key . av sc ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠSubject (" foo ", Ġnull , Ġschema ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . subjects () Ġ} Ġreturns Ġempty List () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . create ( subject ) Ġ} Ġreturns Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( added Ġ= ĠlistOf ( subject )) ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . create ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ+ Ġregistered Ġ( version Ġ 1 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġclient . update Compatibility ( subject ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġregister Ġnew Ġsubject Ġand Ġset Ġcompatibility `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġav ro From Resources (" schemas / key . av sc ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠSubject (" foo ", ĠCompatibility . BACK WARD , Ġschema ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . version ( subject ) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . create ( subject ) Ġ} Ġreturns Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . update Compatibility ( subject ) Ġ} Ġreturns ĠCompatibility . BACK WARD ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( added Ġ= ĠlistOf ( subject )) ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . create ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ+ Ġregistered Ġ( version Ġ 1 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . update Compatibility ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ+ Ġcompatibility ĠBACK WARD ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġev olve Ġschema `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġav ro From Resources (" schemas / key . av sc ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠSubject (" foo ", Ġnull , Ġschema ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . version ( subject ) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . ev olve ( subject ) Ġ} Ġreturns Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Ġ= ĠlistOf ( Diff ing . Changes ( subject , Ġnull , ĠDiff ing . Change ( schema , Ġschema ))) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . ev olve ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġe volved Ġ( version Ġ 5 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġschema ĠĠ Ġ\" string \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġclient . update Compatibility ( subject ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġdelete Ġsubject `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( deleted Ġ= ĠlistOf (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . delete (" foo ") Ġ} Ġjust Ġruns ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . delete (" foo ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ- Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` can Ġupdate Ġcompatibility Ġand Ġev olve Ġschema `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġav ro From Resources (" schemas / key . av sc ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠSubject (" foo ", ĠCompatibility . FORWARD _ TRANS ITIVE , Ġschema ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . version ( subject ) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . update Compatibility ( subject ) Ġ} Ġreturns ĠCompatibility . FULL ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . ev olve ( subject ) Ġ} Ġreturns Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Change ( Compatibility . FORWARD _ TRANS ITIVE , ĠCompatibility . FULL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Change ( schema , Ġschema ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ SUBJECT ] Ġfoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . update Compatibility ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġcompatibility ĠFOR WARD _ TRANS ITIVE Ġ-> ĠFULL ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . ev olve ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġe volved Ġ( version Ġ 2 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" ĠĠ Ġ~ Ġschema ĠĠ Ġ\" string \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` will Ġnot Ġchange Ġsubject Ġcompatibility Ġif Ġmatches Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġav ro From Resources (" schemas / key . av sc ") ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠSubject (" foo ", ĠCompatibility . FULL , Ġschema ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient . version ( subject ) Ġ} Ġreturns Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= ĠDiff ing . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodified Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff ing . Changes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġstate App lier . apply ( diff ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . version ( subject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . update Compatibility ( subject ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ