import { getListDiff } from "../src/list-diff" ;
describe ( "getListDiff" , ( ) = > {
it ( "returns an empty diff if no lists are provided" , ( ) = > {
expect ( getListDiff ( null , null ) ) . toStrictEqual ( {
type : "list" ,
status : "equal" ,
diff : [ ] ,
} ) ;
} ) ;
it ( "consider previous list as completely deleted if no next list is provided" , ( ) = > {
expect (
getListDiff ( [ "mbappe" , "mendes" , "verratti" , "ruiz" ] , null )
) . toStrictEqual ( {
type : "list" ,
status : "deleted" ,
diff : [
{
value : "mbappe" ,
prevIndex : 0 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : "mendes" ,
prevIndex : 1 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : "verratti" ,
prevIndex : 2 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : "ruiz" ,
prevIndex : 3 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
] ,
} ) ;
} ) ;
it ( "consider next list as completely added if no previous list is provided" , ( ) = > {
expect (
getListDiff ( null , [ "mbappe" , "mendes" , "verratti" , "ruiz" ] )
) . toStrictEqual ( {
type : "list" ,
status : "added" ,
diff : [
{
value : "mbappe" ,
prevIndex : null ,
newIndex : 0 ,
indexDiff : null ,
status : "added" ,
} ,
{
value : "mendes" ,
prevIndex : null ,
newIndex : 1 ,
indexDiff : null ,
status : "added" ,
} ,
{
value : "verratti" ,
prevIndex : null ,
newIndex : 2 ,
indexDiff : null ,
status : "added" ,
} ,
{
value : "ruiz" ,
prevIndex : null ,
newIndex : 3 ,
indexDiff : null ,
status : "added" ,
} ,
] ,
} ) ;
} ) ;
it ( "detects changed values in a string list" , ( ) = > {
expect (
getListDiff (
[ "mbappe" , "mendes" , "verratti" , "ruiz" ] ,
[ "mbappe" , "messi" , "ruiz" ]
)
) . toStrictEqual ( {
type : "list" ,
status : "updated" ,
diff : [
{
value : "mbappe" ,
prevIndex : 0 ,
newIndex : 0 ,
indexDiff : 0 ,
status : "equal" ,
} ,
{
value : "mendes" ,
prevIndex : 1 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : "verratti" ,
prevIndex : 2 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : "messi" ,
prevIndex : null ,
newIndex : 1 ,
indexDiff : null ,
status : "added" ,
} ,
{
value : "ruiz" ,
prevIndex : 3 ,
newIndex : 2 ,
indexDiff : - 1 ,
status : "moved" ,
} ,
] ,
} ) ;
} ) ;
it ( "detects changed values in a number list" , ( ) = > {
expect ( getListDiff ( [ 54 , 234 , 76 , 0 ] , [ 54 , 200 , 0 ] ) ) . toStrictEqual ( {
type : "list" ,
status : "updated" ,
diff : [
{
value : 54 ,
prevIndex : 0 ,
newIndex : 0 ,
indexDiff : 0 ,
status : "equal" ,
} ,
{
value : 234 ,
prevIndex : 1 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : 76 ,
prevIndex : 2 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : 200 ,
prevIndex : null ,
newIndex : 1 ,
indexDiff : null ,
status : "added" ,
} ,
{
value : 0 ,
prevIndex : 3 ,
newIndex : 2 ,
indexDiff : - 1 ,
status : "moved" ,
} ,
] ,
} ) ;
} ) ;
it ( "detects changed values in an object list" , ( ) = > {
expect (
getListDiff (
[
{ name : "joe" , age : 87 } ,
{ name : "nina" , age : 23 } ,
{ name : "paul" , age : 32 } ,
] ,
[
{ name : "paul" , age : 32 } ,
{ name : "joe" , age : 88 } ,
{ name : "nina" , age : 23 } ,
]
)
) . toStrictEqual ( {
type : "list" ,
status : "updated" ,
diff : [
{
value : { name : "joe" , age : 87 } ,
prevIndex : 0 ,
newIndex : null ,
indexDiff : null ,
status : "deleted" ,
} ,
{
value : { name : "paul" , age : 32 } ,
prevIndex : 2 ,
newIndex : 0 ,
indexDiff : - 2 ,
status : "moved" ,
} ,
{
value : { name : "joe" , age : 88 } ,
prevIndex : null ,
newIndex : 1 ,
indexDiff : null ,
status : "added" ,
} ,
{
value : { name : "nina" , age : 23 } ,
prevIndex : 1 ,
newIndex : 2 ,
indexDiff : 1 ,
status : "moved" ,
} ,
] ,
} ) ;
} ) ;
} ) ;