11import { describe , it , mock } from 'node:test' ;
22import assert from 'node:assert' ;
3- import {
4- type EmigrateReporter ,
5- type Storage ,
6- type Plugin ,
7- type SerializedError ,
8- type MigrationMetadataFinished ,
9- } from '@emigrate/types' ;
10- import { deserializeError } from 'serialize-error' ;
3+ import { type EmigrateReporter , type Storage , type Plugin , type MigrationMetadataFinished } from '@emigrate/types' ;
114import { version } from '../get-package-info.js' ;
125import {
136 BadOptionError ,
@@ -16,15 +9,14 @@ import {
169 MigrationHistoryError ,
1710 MigrationRunError ,
1811 StorageInitError ,
19- toSerializedError ,
2012} from '../errors.js' ;
2113import {
2214 type Mocked ,
2315 toEntry ,
2416 toMigrations ,
2517 getMockedReporter ,
2618 getMockedStorage ,
27- getErrorCause ,
19+ assertErrorEqualEnough ,
2820} from '../test-utils.js' ;
2921import upCommand from './up.js' ;
3022
@@ -930,31 +922,21 @@ function assertPreconditionsFulfilled(
930922 for ( const [ index , entry ] of failedEntries . entries ( ) ) {
931923 if ( entry . status === 'failed' ) {
932924 const error = reporter . onMigrationError . mock . calls [ index ] ?. arguments [ 1 ] ;
933- assert . deepStrictEqual ( error , entry . error , 'Error' ) ;
934- const cause = entry . error ?. cause ;
935- assert . deepStrictEqual ( error ?. cause , cause ? deserializeError ( cause ) : cause , 'Error cause' ) ;
925+ assertErrorEqualEnough ( error , entry . error , 'Error' ) ;
936926
937927 if ( entry . started ) {
938928 const [ finishedMigration , error ] = storage . onError . mock . calls [ index ] ?. arguments ?? [ ] ;
939929 assert . strictEqual ( finishedMigration ?. name , entry . name ) ;
940930 assert . strictEqual ( finishedMigration ?. status , entry . status ) ;
941- assertErrorEqualEnough ( error , entry . error ) ;
931+ assertErrorEqualEnough ( error , entry . error , `Entry error ( ${ entry . name } )` ) ;
942932 }
943933 }
944934 }
945935
946936 assert . strictEqual ( reporter . onMigrationSkip . mock . calls . length , pending + skipped , 'Total pending and skipped' ) ;
947937 assert . strictEqual ( reporter . onFinished . mock . calls . length , 1 , 'Finished called once' ) ;
948938 const [ entries , error ] = reporter . onFinished . mock . calls [ 0 ] ?. arguments ?? [ ] ;
949- assertErrorEqualEnough ( error , finishedError ) ;
950-
951- const cause = getErrorCause ( error ) ;
952- const expectedCause = finishedError ?. cause ;
953- assert . deepStrictEqual (
954- cause ,
955- expectedCause ? deserializeError ( expectedCause ) : expectedCause ,
956- 'Finished error cause' ,
957- ) ;
939+ assertErrorEqualEnough ( error , finishedError , 'Finished error' ) ;
958940 assert . strictEqual ( entries ?. length , expected . length , 'Finished entries length' ) ;
959941 assert . deepStrictEqual (
960942 entries . map ( ( entry ) => `${ entry . name } (${ entry . status } )` ) ,
@@ -995,33 +977,6 @@ function assertPreconditionsFailed(
995977 assert . strictEqual ( reporter . onMigrationSkip . mock . calls . length , 0 , 'Total pending and skipped' ) ;
996978 assert . strictEqual ( reporter . onFinished . mock . calls . length , 1 , 'Finished called once' ) ;
997979 const [ entries , error ] = reporter . onFinished . mock . calls [ 0 ] ?. arguments ?? [ ] ;
998- assert . deepStrictEqual ( error , finishedError , 'Finished error' ) ;
999- const cause = getErrorCause ( error ) ;
1000- const expectedCause = finishedError ?. cause ;
1001- assert . deepStrictEqual (
1002- cause ,
1003- expectedCause ? deserializeError ( expectedCause ) : expectedCause ,
1004- 'Finished error cause' ,
1005- ) ;
980+ assertErrorEqualEnough ( error , finishedError , 'Finished error' ) ;
1006981 assert . strictEqual ( entries ?. length , 0 , 'Finished entries length' ) ;
1007982}
1008-
1009- function assertErrorEqualEnough ( actual ?: Error | SerializedError , expected ?: Error ) {
1010- if ( expected === undefined ) {
1011- assert . strictEqual ( actual , undefined ) ;
1012- return ;
1013- }
1014-
1015- const {
1016- cause : actualCause ,
1017- stack : actualStack ,
1018- ...actualError
1019- } = actual instanceof Error ? toSerializedError ( actual ) : actual ?? { } ;
1020- const { cause : expectedCause , stack : expectedStack , ...expectedError } = toSerializedError ( expected ) ;
1021- // @ts -expect-error Ignore
1022- const { stack : actualCauseStack , ...actualCauseRest } = actualCause ?? { } ;
1023- // @ts -expect-error Ignore
1024- const { stack : expectedCauseStack , ...expectedCauseRest } = expectedCause ?? { } ;
1025- assert . deepStrictEqual ( actualError , expectedError ) ;
1026- assert . deepStrictEqual ( actualCauseRest , expectedCauseRest ) ;
1027- }
0 commit comments