Skip to content

Commit dcaba8a

Browse files
AVaksmanjkwlui
authored andcommitted
fix: file#move do not delete origin file if same as destination (#874)
* fix: file#move do not delete origin if same as destination * lint: lint * fix: system-test * chore: remove commented code
1 parent 09b8fa4 commit dcaba8a

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

src/file.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3042,9 +3042,16 @@ class File extends ServiceObject<File> {
30423042
return;
30433043
}
30443044

3045-
this.delete(options, (err, apiResponse) => {
3046-
callback!(err, destinationFile, apiResponse);
3047-
});
3045+
if (
3046+
this.name !== destinationFile!.name ||
3047+
this.bucket.name !== destinationFile!.bucket.name
3048+
) {
3049+
this.delete(options, (err, apiResponse) => {
3050+
callback!(err, destinationFile, apiResponse);
3051+
});
3052+
} else {
3053+
callback!(null, destinationFile, apiResponse);
3054+
}
30483055
});
30493056
}
30503057

test/file.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3450,8 +3450,9 @@ describe('File', () => {
34503450

34513451
describe('delete original file', () => {
34523452
it('should delete if copy is successful', done => {
3453+
const destinationFile = {bucket: {}};
34533454
file.copy = (destination: {}, options: {}, callback: Function) => {
3454-
callback(null);
3455+
callback(null, destinationFile);
34553456
};
34563457
Object.assign(file, {
34573458
delete() {
@@ -3476,11 +3477,34 @@ describe('File', () => {
34763477
});
34773478
});
34783479

3480+
it('should not delete the destination is same as origin', done => {
3481+
file.request = (config: {}, callback: Function) => {
3482+
callback(null, {});
3483+
};
3484+
const stub = sinon.stub(file, 'delete');
3485+
// destination is same bucket as object
3486+
file.move(BUCKET, (err: Error) => {
3487+
assert.ifError(err);
3488+
// destination is same file as object
3489+
file.move(file, (err: Error) => {
3490+
assert.ifError(err);
3491+
// destination is same file name as string
3492+
file.move(file.name, (err: Error) => {
3493+
assert.ifError(err);
3494+
assert.ok(stub.notCalled);
3495+
stub.reset();
3496+
done();
3497+
});
3498+
});
3499+
});
3500+
});
3501+
34793502
it('should pass options to delete', done => {
34803503
const options = {};
3504+
const destinationFile = {bucket: {}};
34813505

34823506
file.copy = (destination: {}, options: {}, callback: Function) => {
3483-
callback();
3507+
callback(null, destinationFile);
34843508
};
34853509

34863510
file.delete = (options_: {}) => {
@@ -3493,8 +3517,9 @@ describe('File', () => {
34933517

34943518
it('should fail if delete fails', done => {
34953519
const error = new Error('Error.');
3520+
const destinationFile = {bucket: {}};
34963521
file.copy = (destination: {}, options: {}, callback: Function) => {
3497-
callback();
3522+
callback(null, destinationFile);
34983523
};
34993524
file.delete = (options: {}, callback: Function) => {
35003525
callback(error);

0 commit comments

Comments
 (0)