mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-12 07:12:54 +01:00
Initial commit
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
This commit is contained in:
107
packages/noodl-editor/tests/git/git-stash-merge.spec.ts
Normal file
107
packages/noodl-editor/tests/git/git-stash-merge.spec.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { app } from '@electron/remote';
|
||||
import { Git } from '@noodl/git';
|
||||
|
||||
import FileSystem from '@noodl-utils/filesystem';
|
||||
import { mergeProject } from '@noodl-utils/projectmerger';
|
||||
import Utils from '@noodl-utils/utils';
|
||||
|
||||
describe('Git stash tests', function () {
|
||||
let localGitA: Git, localGitB: Git;
|
||||
let remoteGit: Git;
|
||||
|
||||
let localDirA: string;
|
||||
let localDirB: string;
|
||||
let remoteDir: string;
|
||||
|
||||
beforeEach(async function () {
|
||||
// Logger.log(`[jest-before]: ${expect.getState().currentTestName}`)
|
||||
|
||||
remoteDir = path.join(app.getPath('temp'), '/noodlunittests-git-' + Utils.guid());
|
||||
localDirA = path.join(app.getPath('temp'), '/noodlunittests-git-' + Utils.guid());
|
||||
localDirB = path.join(app.getPath('temp'), '/noodlunittests-git-' + Utils.guid());
|
||||
|
||||
// Logger.log("remoteDir: " + remoteDir);
|
||||
// Logger.log("localDirA: " + localDirA);
|
||||
// Logger.log("localDirB: " + localDirB);
|
||||
|
||||
FileSystem.instance.makeDirectorySync(localDirA);
|
||||
FileSystem.instance.makeDirectorySync(localDirB);
|
||||
FileSystem.instance.makeDirectorySync(remoteDir);
|
||||
|
||||
localGitA = new Git(mergeProject);
|
||||
localGitB = new Git(mergeProject);
|
||||
remoteGit = new Git(mergeProject);
|
||||
|
||||
//init a bare repository as remote
|
||||
await remoteGit.initNewRepo(remoteDir, { bare: true });
|
||||
|
||||
//init a new local repo and push it to A (mimics how a new project is created)
|
||||
await localGitA.initNewRepo(localDirA);
|
||||
});
|
||||
|
||||
afterEach(function (done) {
|
||||
// Logger.log(`\r\n[jest-after]: ${expect.getState().currentTestName}`)
|
||||
|
||||
FileSystem.instance.removeDirectoryRecursive(remoteDir, () => {
|
||||
FileSystem.instance.removeDirectoryRecursive(localDirA, () => {
|
||||
FileSystem.instance.removeDirectoryRecursive(localDirB, done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Issue: https://app.asana.com/0/1202061493156140/1202351418844106/f
|
||||
* >
|
||||
* > Michael Cartner:
|
||||
* > i mitt fall så var det två användare som öppnade samma 2.5 projekt.
|
||||
* > Båda skapade då en .gitignore lokalt
|
||||
* > Användare A commitade
|
||||
* > Användare B pullade => felmeddelandet ovan
|
||||
* >
|
||||
* >
|
||||
* > Related?: https://stackoverflow.com/questions/51275777/why-does-git-stash-pop-say-that-it-could-not-restore-untracked-files-from-stash
|
||||
*/
|
||||
it('pop-stash with merge issues', async function () {
|
||||
// Git A
|
||||
// 1. delete .gitignore
|
||||
const statusA1 = await localGitA.status();
|
||||
expect(statusA1.length).toEqual(2); // .gitignore and .gitattributes
|
||||
|
||||
fs.writeFileSync(localDirA + '/temp', 'temp');
|
||||
fs.unlinkSync(localDirA + '/.gitignore');
|
||||
|
||||
await localGitA.commit('initial commit without .gitignore');
|
||||
await localGitA.addRemote(remoteDir);
|
||||
await localGitA.push();
|
||||
|
||||
// Git B
|
||||
await localGitB.clone({ url: remoteDir, directory: localDirB });
|
||||
await localGitB.fetch({});
|
||||
|
||||
const statusB1 = await localGitB.status();
|
||||
expect(statusB1.length).toEqual(1);
|
||||
|
||||
await localGitB.commit('commit .gitignore');
|
||||
await localGitB.push();
|
||||
|
||||
// Git A
|
||||
// Recreate the repo (creating .gitignore)
|
||||
localGitA = new Git(mergeProject);
|
||||
await localGitA.openRepository(localDirA);
|
||||
|
||||
// Check that we have it
|
||||
const statusA2 = await localGitA.status();
|
||||
expect(statusA2.length).toEqual(1);
|
||||
|
||||
/**
|
||||
* GitError: .gitignore already exists, no checkout
|
||||
* error: could not restore untracked files from stash
|
||||
*/
|
||||
await localGitA.pull({});
|
||||
|
||||
const statusA3 = await localGitA.status();
|
||||
expect(statusA3.length).toEqual(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user