|
1 | 1 | import { HashDiff } from "./HashDiff";
|
2 |
| -import { IFileList, currentSyncFileVersion, IFile, IFtpDeployArgumentsWithDefaults } from "./types"; |
| 2 | +import { IFileList, currentSyncFileVersion, IFile, IFtpDeployArgumentsWithDefaults, DiffResult } from "./types"; |
3 | 3 | import { Record } from "./types";
|
4 | 4 | import { applyExcludeFilter, getDefaultSettings, ILogger, Timings } from "./utilities";
|
5 | 5 | import path from "path";
|
6 | 6 | import FtpSrv from "ftp-srv";
|
7 | 7 | import { getLocalFiles } from "./localFiles";
|
8 | 8 | import { FTPSyncProvider } from "./syncProvider";
|
9 |
| -import { deploy } from "./deploy"; |
| 9 | +import { deploy, getServerFiles } from "./deploy"; |
10 | 10 | import { Stats as readdirStats } from "@jsdevtools/readdir-enhanced";
|
11 | 11 | import { excludeDefaults } from "./module";
|
12 | 12 |
|
@@ -787,6 +787,91 @@ describe("error handling", () => {
|
787 | 787 | }, 30000);
|
788 | 788 | });
|
789 | 789 |
|
| 790 | +describe("dry-run", () => { |
| 791 | + test("getServerFiles doesn't mutate server", async () => { |
| 792 | + const mockedLogger = new MockedLogger(); |
| 793 | + const mockedTimings = new Timings(); |
| 794 | + const mockClient = { |
| 795 | + clearWorkingDir() { }, |
| 796 | + ensureDir() { }, |
| 797 | + }; |
| 798 | + const settings = getDefaultSettings({ |
| 799 | + server: "a", |
| 800 | + username: "b", |
| 801 | + password: "c", |
| 802 | + "dry-run": true, |
| 803 | + "dangerous-clean-slate": true, |
| 804 | + }); |
| 805 | + |
| 806 | + const spyClearWorkingDir = jest.spyOn(mockClient, "clearWorkingDir"); |
| 807 | + await getServerFiles(mockClient as any, mockedLogger, mockedTimings, settings); |
| 808 | + |
| 809 | + expect(spyClearWorkingDir).toHaveBeenCalledTimes(0); |
| 810 | + }); |
| 811 | + |
| 812 | + test("doesn't mutate server", async () => { |
| 813 | + const mockedLogger = new MockedLogger(); |
| 814 | + const mockedTimings = new Timings(); |
| 815 | + const mockClient = { |
| 816 | + uploadFile() { }, |
| 817 | + removeFile() { }, |
| 818 | + uploadFrom() { }, |
| 819 | + remove() { }, |
| 820 | + }; |
| 821 | + const mockedDiffs: DiffResult = { |
| 822 | + upload: [ |
| 823 | + { |
| 824 | + type: "file", |
| 825 | + name: "path/upload.txt", |
| 826 | + size: 1000, |
| 827 | + hash: "hash2", |
| 828 | + } |
| 829 | + ], |
| 830 | + delete: [ |
| 831 | + { |
| 832 | + type: "file", |
| 833 | + name: "path/delete.txt", |
| 834 | + size: 1000, |
| 835 | + hash: "hash2", |
| 836 | + } |
| 837 | + ], |
| 838 | + replace: [ |
| 839 | + { |
| 840 | + type: "file", |
| 841 | + name: "path/replace.txt", |
| 842 | + size: 1000, |
| 843 | + hash: "hash2", |
| 844 | + } |
| 845 | + ], |
| 846 | + same: [ |
| 847 | + { |
| 848 | + type: "file", |
| 849 | + name: "path/same.txt", |
| 850 | + size: 1000, |
| 851 | + hash: "hash2", |
| 852 | + } |
| 853 | + ], |
| 854 | + sizeUpload: 1000, |
| 855 | + sizeDelete: 1000, |
| 856 | + sizeReplace: 1000, |
| 857 | + }; |
| 858 | + |
| 859 | + // todo ensureDir |
| 860 | + |
| 861 | + const syncProvider = new FTPSyncProvider(mockClient as any, mockedLogger, mockedTimings, "local-dir/", "server-dir/", "state-name", true); |
| 862 | + const spyUploadFile = jest.spyOn(mockClient, "uploadFile"); |
| 863 | + const spyRemoveFile = jest.spyOn(mockClient, "removeFile"); |
| 864 | + const spyUploadFrom = jest.spyOn(mockClient, "uploadFrom"); |
| 865 | + const spyRemove = jest.spyOn(mockClient, "remove"); |
| 866 | + await syncProvider.syncLocalToServer(mockedDiffs); |
| 867 | + |
| 868 | + expect(spyUploadFile).toHaveBeenCalledTimes(0); |
| 869 | + expect(spyRemoveFile).toHaveBeenCalledTimes(0); |
| 870 | + expect(spyUploadFrom).toHaveBeenCalledTimes(0); |
| 871 | + expect(spyRemove).toHaveBeenCalledTimes(0); |
| 872 | + }); |
| 873 | +}); |
| 874 | + |
790 | 875 | describe("Deploy", () => {
|
791 | 876 | const port = 2121;
|
792 | 877 | const homeDir = path.join(__dirname, "../");
|
|
0 commit comments