Skip to content

Commit 34deeb2

Browse files
committed
Include cloning methods for SdlFiles and unit tests to cover
1 parent e71315d commit 34deeb2

6 files changed

Lines changed: 140 additions & 8 deletions

File tree

lib/js/src/manager/file/_FileManagerBase.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ class _FileManagerBase extends _SubManagerBase {
255255
if (!fileClone.isPersistent()) {
256256
this._uploadedEphemeralFileNames.push(fileName);
257257
}
258-
} else if (errorMessage !== 'File is already on the head unit, aborting upload operation') {
258+
} else if (errorMessage !== _UploadFileOperation.fileManagerCannotOverwriteError) {
259259
this._incrementFailedUploadCountForFileName(fileName, this._failedFileUploadsCount);
260260

261261
const maxUploadCount = (fileClone instanceof SdlArtwork) ? this._maxArtworkUploadAttempts : this._maxFileUploadAttempts;

lib/js/src/manager/file/_UploadFileOperation.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class _UploadFileOperation extends _Task {
4747
}
4848

4949
if (!this._fileManager.fileNeedsUpload(file)) {
50-
const errorMessage = 'File is already on the head unit, aborting upload operation';
50+
const errorMessage = this.fileManagerCannotOverwriteError;
5151
console.log(errorMessage);
5252
this._fileWrapper.getCompletionListener(false, null, null, errorMessage);
5353
return this.onFinished();
@@ -257,4 +257,6 @@ class _UploadFileOperation extends _Task {
257257
}
258258
}
259259

260+
_UploadFileOperation.fileManagerCannotOverwriteError = 'Cannot overwrite remote file. The remote file system already has a file of this name, and the file manager is set to not automatically overwrite files.';
261+
260262
export { _UploadFileOperation };

lib/js/src/manager/file/filetypes/SdlArtwork.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ class SdlArtwork extends SdlFile {
117117
}
118118
return image;
119119
}
120+
121+
/**
122+
* Creates a deep copy of the object
123+
* @returns {ChoiceCell} - A deep copy of the object
124+
*/
125+
clone () {
126+
const clonedParams = Object.assign({}, this); // shallow copy
127+
128+
return Object.assign(new SdlArtwork(this.getName(), this.getType(), this.getFileData(), this.isPersistent()), clonedParams);
129+
}
120130
}
121131

122132
export { SdlArtwork };
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
const chai = require('chai');
2+
chai.use(require('chai-as-promised'));
3+
const SDL = require('../../config.js').node;
4+
5+
// Mocking framework
6+
// Used to stub an RPC call so that it isn't actually sent to Core
7+
const Validator = require('../../Validator');
8+
9+
module.exports = function (appClient) {
10+
describe('SdlFileTests', function () {
11+
it('testFileEquality', function () {
12+
const fileName = 'testFile';
13+
const fileData = 'it is wednesday';
14+
const filePath = './doesnt_go_anywhere.txt';
15+
const file = new SDL.manager.file.filetypes.SdlFile(fileName, SDL.rpc.enums.FileType.BINARY, fileData, true)
16+
.setFilePath(filePath)
17+
.setStaticIcon(true)
18+
.setOverwrite(true);
19+
const file2 = new SDL.manager.file.filetypes.SdlFile(fileName, SDL.rpc.enums.FileType.BINARY, fileData, true)
20+
.setFilePath(filePath)
21+
.setStaticIcon(true)
22+
.setOverwrite(true);
23+
Validator.assertTrue(file.equals(file2));
24+
25+
const fileClone = file.clone();
26+
Validator.assertTrue(file !== fileClone);
27+
Validator.assertTrue(file.equals(file2));
28+
29+
fileClone.setName('something else');
30+
fileClone.setFilePath('./goes_nowhere.txt');
31+
fileClone.setFileData('my dudes');
32+
fileClone.setType(SDL.rpc.enums.FileType.JSON);
33+
fileClone.setPersistent(false);
34+
fileClone.setStaticIcon(false);
35+
fileClone.setOverwrite(false);
36+
37+
Validator.assertTrue(file !== fileClone);
38+
Validator.assertTrue(!file.equals(fileClone));
39+
Validator.assertNotEquals(file.getName(), fileClone.getName());
40+
Validator.assertNotEquals(file.getFilePath(), fileClone.getFilePath());
41+
Validator.assertNotEquals(file.getFileData(), fileClone.getFileData());
42+
Validator.assertNotEquals(file.getType(), fileClone.getType());
43+
Validator.assertNotEquals(file.isPersistent(), fileClone.isPersistent());
44+
Validator.assertNotEquals(file.isStaticIcon(), fileClone.isStaticIcon());
45+
Validator.assertNotEquals(file.getOverwrite(), fileClone.getOverwrite());
46+
47+
const emptyFile = new SDL.manager.file.filetypes.SdlFile(null, SDL.rpc.enums.FileType.BINARY, null, false);
48+
const emptyClone = emptyFile.clone();
49+
50+
Validator.assertTrue(emptyFile !== emptyClone);
51+
Validator.assertTrue(emptyFile.equals(emptyClone));
52+
Validator.assertTrue(emptyClone !== fileClone);
53+
});
54+
});
55+
describe('SdlArtworkTests', function () {
56+
it('testFileEquality', function () {
57+
const fileName = 'testFile';
58+
const fileData = 'it is wednesday';
59+
const filePath = './doesnt_go_anywhere.txt';
60+
const file = new SDL.manager.file.filetypes.SdlArtwork(fileName, SDL.rpc.enums.FileType.GRAPHIC_JPEG, fileData, true)
61+
.setFilePath(filePath)
62+
.setStaticIcon(true)
63+
.setOverwrite(true)
64+
.setTemplateImage(true);
65+
const file2 = new SDL.manager.file.filetypes.SdlArtwork(fileName, SDL.rpc.enums.FileType.GRAPHIC_JPEG, fileData, true)
66+
.setFilePath(filePath)
67+
.setStaticIcon(true)
68+
.setOverwrite(true)
69+
.setTemplateImage(true);
70+
Validator.assertTrue(file.equals(file2));
71+
72+
const fileClone = file.clone();
73+
Validator.assertTrue(file !== fileClone);
74+
Validator.assertTrue(file.equals(file2));
75+
76+
fileClone.setName('something else');
77+
fileClone.setFilePath('./goes_nowhere.txt');
78+
fileClone.setFileData('my dudes');
79+
fileClone.setType(SDL.rpc.enums.FileType.GRAPHIC_PNG);
80+
fileClone.setPersistent(false);
81+
fileClone.setStaticIcon(false);
82+
fileClone.setOverwrite(false);
83+
fileClone.setTemplateImage(false);
84+
85+
Validator.assertTrue(file !== fileClone);
86+
Validator.assertTrue(!file.equals(fileClone));
87+
Validator.assertNotEquals(file.getName(), fileClone.getName());
88+
Validator.assertNotEquals(file.getFilePath(), fileClone.getFilePath());
89+
Validator.assertNotEquals(file.getFileData(), fileClone.getFileData());
90+
Validator.assertNotEquals(file.getType(), fileClone.getType());
91+
Validator.assertNotEquals(file.isPersistent(), fileClone.isPersistent());
92+
Validator.assertNotEquals(file.isStaticIcon(), fileClone.isStaticIcon());
93+
Validator.assertNotEquals(file.getOverwrite(), fileClone.getOverwrite());
94+
Validator.assertNotEquals(file.isTemplateImage(), fileClone.isTemplateImage());
95+
96+
const emptyFile = new SDL.manager.file.filetypes.SdlArtwork(null, SDL.rpc.enums.FileType.GRAPHIC_JPEG, null, false);
97+
const emptyClone = emptyFile.clone();
98+
99+
Validator.assertTrue(emptyFile !== emptyClone);
100+
Validator.assertTrue(emptyFile.equals(emptyClone));
101+
Validator.assertTrue(emptyClone !== fileClone);
102+
});
103+
});
104+
};

tests/managers/file/UploadFileOperationTests.js

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,36 @@ module.exports = function (appClient) {
4141
describe('when overwriting', function () {
4242
it('should send the upload RPCs', async function () {
4343
const stub = sinon.stub(fileManager, 'fileNeedsUpload')
44-
.callsFake((file) => false);
44+
.callsFake((file) => true);
45+
const putFileStub = sinon.stub(sdlManager._lifecycleManager, 'sendRpcResolve');
46+
putFileStub.withArgs(sinon.match.instanceOf(SDL.rpc.messages.PutFile)).callsFake(() => {
47+
const responseFailure = new SDL.rpc.messages.PutFileResponse({
48+
functionName: SDL.rpc.enums.FunctionID.PutFile,
49+
})
50+
.setSuccess(true);
51+
sdlManager._lifecycleManager._handleRpc(responseFailure);
52+
53+
return new Promise((resolve, reject) => {
54+
resolve(responseFailure);
55+
});
56+
});
4557
const testFileName = 'TestSmallMemory';
4658
const testFileData = 'test1234';
4759
const testFile = new SDL.manager.file.filetypes.SdlFile(testFileName, SDL.rpc.enums.FileType.BINARY, testFileData, true)
4860
.setOverwrite(true);
4961

5062
const testFileWrapper = new SDL.manager.file._SdlFileWrapper(testFile, (success, bytesAvailable, fileNames, errorMessage) => {
51-
Validator.assertTrue(!success);
52-
Validator.assertNull(bytesAvailable);
63+
Validator.assertTrue(success);
64+
Validator.assertNotNullUndefined(bytesAvailable);
5365
Validator.assertNull(fileNames);
54-
Validator.assertNotNullUndefined(errorMessage);
55-
Validator.assertEquals(errorMessage, uploadOverwriteFailure);
66+
Validator.assertNull(errorMessage);
5667
});
5768
const operation = new SDL.manager.file._UploadFileOperation(sdlManager._lifecycleManager, sdlManager.getFileManager(), testFileWrapper);
5869
await operation._start();
70+
putFileStub.restore();
5971
stub.restore();
6072

61-
Validator.assertNotEquals(operation.getState(), SDL.manager._Task.FINISHED);
73+
Validator.assertEquals(operation.getState(), SDL.manager._Task.FINISHED);
6274
});
6375
});
6476
});

tests/managers/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ const softButtonManagerTests = require('./screen/SoftButtonManagerTests');
55
const screenManagerTests = require('./screen/ScreenManagerTests');
66
const lifecycleManagerTests = require('./lifecycle/LifecycleManagerTests');
77
const fileManagerTests = require('./file/FileManagerTests');
8+
const uploadFileOperationTests = require('./file/UploadFileOperationTests');
9+
const sdlFileTests = require('./file/SdlFileTests');
810
const taskTests = require('./TaskTests');
911
const queueTests = require('./QueueTests');
1012
const textAndGraphicManagerTests = require('./screen/TextAndGraphicManagerTests');
@@ -54,6 +56,8 @@ describe('ManagerTests', function () {
5456
presentKeyboardOperationTests(appClient);
5557
softButtonManagerTests(appClient);
5658
fileManagerTests(appClient);
59+
uploadFileOperationTests(appClient);
60+
sdlFileTests(appClient);
5761

5862
setTimeout(function () {
5963
// teardown();

0 commit comments

Comments
 (0)