package Ġar . edu . un q . mongodb Ċ Ċ import Ġar . edu . un q . dao . Proveedor DAO Ċ import Ġar . edu . un q . dao . mongodb . Mongo Producto DAO Impl Ċ import Ġar . edu . un q . dao . mongodb . Mongo Proveedor DAO Impl Ċ import Ġar . edu . un q . modelo . Producto Ċ import Ġar . edu . un q . modelo . Proveedor Ċ import Ġar . edu . un q . services . runner . Data BaseType Ċ import Ġar . edu . un q . services . runner . Transaction Runner Ċ import Ġar . edu . un q . services . runner . Transaction Runner . run Tr x Ċ import Ġar . edu . un q . services . runner . Transaction Type Ċ import Ġcom . mongodb . client . model . Ag greg ates Ċ import Ġorg . bson . Document Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠMongo Producto DAO Test Ġ: ĠGeneric Mongo DAO Test < Producto >( Mongo Producto DAO Impl ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpro veedor DAO : ĠPro veedor DAO Ġ= ĠMongo Proveedor DAO Impl () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpro veedor : ĠPro veedor ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Co lection () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . delete Co lection () ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠTransaction Runner . getTransaction (). data Base ĊĠĠĠĠĠĠĠ Ġdatabase . get Collection (" Proveedor "). drop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgener ar Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro veedor Ġ= ĠPro veedor (" G ib son ", Ġ" foto "," http :// res . cloudinary . com / inst ac long bar re iro / image / upload / v 1 6 0 6 3 5 5 7 3 9 / lq bi om w 4 b ll gi 6 y jb 0 s 5 . jpg ", Ġ" https :// www . facebook . com / G ib son ES /", Ġ" https :// www . instagram . com / g ib song uit ar /? hl = es - la ", Ġ" https :// www . g ib son . com /") ĊĠĠĠĠĠĠĠ Ġthis . items . add ( Producto ( this . pro veedor . id , Ġ" Les ĠPaul ", Ġ" A Ġelectric Ġgu itar .", Ġ 7 , Ġ 1 0 0 0 0 0 0 , Ġ 8 0 0 0 0 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġthis . items . add ( Producto ( pro veedor . id , Ġ" Les ĠPaul B ", Ġ" A Ġelectric Ġgu itar .", Ġ 7 , Ġ 1 0 0 0 0 0 0 , Ġ 8 0 0 0 0 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġthis . items . forEach Ġ{ Ġproducto Ġ-> Ġpro veedor . add Product ( producto ) Ġ} ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ Ġthis . pro veedor DAO . save ( pro veedor ) Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete All () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ Ġthis . pro veedor DAO . delete All () Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbor rar N Items ( n : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 .. n ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pro veedor . remove Product ( this . items [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . items . remove At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . pro veedor DAO . update ( pro veedor , Ġpro veedor . id . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠ Ġfun Ġal Intent ar Guardar Product os F alla () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ Ġthis . dao . save ( Producto ()) Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠ Ġfun Ġal Intent ar Actualizar Un Pod uct o F alla () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . items [ 0 ]. itemName Ġ= Ġ" H ola " ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dao . update ( this . items [ 0 ], Ġthis . items [ 0 ]. id . toString ()) ĊĠĠĠĠĠĠĠ Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠ Ġfun Ġal Intent ar Bor rar Un Pod uct o F alla () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dao . delete ( this . items [ 0 ]. id . toString ()) ĊĠĠĠĠĠĠĠ Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠ Ġfun Ġal Intent ar Bor rar Todos Los Product os F alla () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ Ġthis . dao . delete All () Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencontr ar Items Que C ump len Pro pied ad () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproduct os Rec uper ados Ġ= Ġrun Tr x ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dao . find Eq (" itemName ", Ġ" Les Pa ul ") ĊĠĠĠĠĠĠĠ Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( this . items . filter Ġ{ Ġit . itemName Ġ== Ġ" Les Pa ul " Ġ}. toSet (), Ġproduct os Rec uper ados . toSet ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Si Los At ribut os De Los Element os De La View No Coin cid en Se Cre aN ue v amente () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Tr x ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠTransaction Runner . getTransaction (). data Base ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . get Collection (" Producto "). drop () ĊĠĠĠĠĠĠĠ Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĊĠĠĠĠĠĠĠ Ġrun Tr x ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠTransaction Runner . getTransaction (). data Base ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpro y ect ar Product os Ġ= ĠAg greg ates . project ( Document (" list Products ", Ġ"\ $ productos ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsepar ar Product os Ġ= ĠAg greg ates . un wind ("\ $ list Products ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpro y ect ar Product os In div idu ales Ġ= ĠAg greg ates . project ( this . est ruct ura De Producto F al sa ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . create View (" Producto ", Ġ" Proveedor ", ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpro y ect ar Product os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsepar ar Product os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpro y ect ar Product os In div idu ales ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġrun Tr x ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠTransaction Runner . getTransaction (). data Base ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . get Collection (" Producto ", ĠProduct o :: class . java ). find (). toList () ĊĠĠĠĠĠĠĠ Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( this . items . toSet (), Ġresult . toSet ()) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġrun Tr x ({ Ġthis . dao . getAll () Ġ}, ĠlistOf ( Transaction Type . MONGO ), ĠData BaseType . TEST ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( this . items . toSet (), Ġresult . toSet ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġest ruct ura De Producto F al sa (): ĠDocument Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDocument ("__ est ruct ura F al sa __", Ġ"\ $ So y Mas F al sa Que B il lete De T res Pes os ") ĊĠĠĠ Ġ} Ċ }