Skip to content

Commit c4878b9

Browse files
authored
Merge pull request #2525 from codefori/fixes/get_members
Refactor component handling and improve user input management
2 parents 05fbee8 + 14b2b0c commit c4878b9

File tree

6 files changed

+36
-14
lines changed

6 files changed

+36
-14
lines changed

src/api/IBMiContent.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,12 @@ export default class IBMiContent {
766766
*/
767767
getMemberInfo(library: string, sourceFile: string, member: string) {
768768
const component = this.ibmi.getComponent<GetMemberInfo>(GetMemberInfo.ID)!;
769-
return component.getMemberInfo(this.ibmi, library, sourceFile, member);
769+
770+
if (component) {
771+
return component.getMemberInfo(this.ibmi, library, sourceFile, member);
772+
} else {
773+
return Promise.resolve(undefined);
774+
}
770775
}
771776

772777
/**

src/api/components/getMemberInfo.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,31 @@ export class GetMemberInfo implements IBMiComponent {
5353
});
5454
}
5555

56+
private static parseDateString(tsString: string|undefined): Date | undefined {
57+
if (!tsString) {
58+
return undefined;
59+
}
60+
61+
const dateParts = tsString.split('-');
62+
const timeParts = dateParts[3].split('.');
63+
64+
const year = parseInt(dateParts[0], 10);
65+
const month = parseInt(dateParts[1], 10) - 1; // Months are zero-based in JavaScript
66+
const day = parseInt(dateParts[2], 10);
67+
const hours = parseInt(timeParts[0], 10);
68+
const minutes = parseInt(timeParts[1], 10);
69+
const seconds = parseInt(timeParts[2], 10);
70+
71+
return new Date(year, month, day, hours, minutes, seconds);
72+
}
73+
5674
async getMemberInfo(connection: IBMi, library: string, sourceFile: string, member: string): Promise<IBMiMember | undefined> {
5775
const config = connection.config!;
5876
const tempLib = config.tempLibrary;
5977
const statement = `select * from table(${tempLib}.${this.procedureName}('${library}', '${sourceFile}', '${member}'))`;
6078

6179
let results: Tools.DB2Row[] = [];
62-
if (config.enableSQL) {
80+
if (connection.enableSQL) {
6381
try {
6482
results = await connection.runSQL(statement);
6583
} catch (e) { } // Ignore errors, will return undefined.
@@ -78,8 +96,8 @@ export class GetMemberInfo implements IBMiComponent {
7896
name: result.MEMBER,
7997
extension: result.EXTENSION,
8098
text: result.DESCRIPTION,
81-
created: new Date(result.CREATED ? Number(result.CREATED) : 0),
82-
changed: new Date(result.CHANGED ? Number(result.CHANGED) : 0)
99+
created: GetMemberInfo.parseDateString(String(result.CREATED)),
100+
changed: GetMemberInfo.parseDateString(String(result.CHANGED))
83101
} as IBMiMember
84102
}
85103
}
@@ -92,7 +110,7 @@ export class GetMemberInfo implements IBMiComponent {
92110
.join(' union all ');
93111

94112
let results: Tools.DB2Row[] = [];
95-
if (config.enableSQL) {
113+
if (connection.enableSQL) {
96114
try {
97115
results = await connection.runSQL(statement);
98116
} catch (e) { }; // Ignore errors, will return undefined.
@@ -110,8 +128,8 @@ export class GetMemberInfo implements IBMiComponent {
110128
name: result.MEMBER,
111129
extension: result.EXTENSION,
112130
text: result.DESCRIPTION,
113-
created: new Date(result.CREATED ? Number(result.CREATED) : 0),
114-
changed: new Date(result.CHANGED ? Number(result.CHANGED) : 0)
131+
created: GetMemberInfo.parseDateString(String(result.CREATED)),
132+
changed: GetMemberInfo.parseDateString(String(result.CHANGED))
115133
} as IBMiMember
116134
});
117135
}

src/api/components/manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ export class ComponentManager {
6262
const installed = lastInstalled.find(i => i.id.name === component.getIdentification().name);
6363
const sameVersion = installed && (installed.id.version === component.getIdentification().version);
6464

65-
if (!installed || !sameVersion) {
65+
if (!installed || !sameVersion || installed.state === `NotChecked`) {
6666
await newComponent.check();
6767
} else {
68-
newComponent.overrideState(installed.state);
68+
await newComponent.overrideState(installed.state);
6969
}
7070

7171
this.registered.set(component.getIdentification().name, newComponent);

src/api/tests/suites/components.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ describe('Component Tests', () => {
7070
expect(memberInfoC?.library).toBe(tempLib);
7171
expect(memberInfoC?.file).toBe(tempSPF);
7272
expect(memberInfoC?.name).toBe(tempMbr);
73-
expect(memberInfoC?.created).toBeTypeOf('number');
74-
expect(memberInfoC?.changed).toBeTypeOf('number');
73+
expect(memberInfoC?.created).toBeTypeOf('object');
74+
expect(memberInfoC?.changed).toBeTypeOf('object');
7575

7676
// Cleanup...
7777
await connection!.runCommand({

src/api/tests/suites/content.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ describe('Content Tests', {concurrent: true}, () => {
521521
expect(error).toBeInstanceOf(Tools.SqlError);
522522
expect(error.sqlstate).toBe('38501');
523523
}
524-
});
524+
}, {timeout: 25000});
525525

526526
it('Test @clCommand + select statement', async () => {
527527
const content = connection.getContent();

src/api/tests/suites/encoding.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ describe('Encoding tests', {concurrent: true} ,() => {
8080
});
8181

8282
it('Run variants through shells', async () => {
83-
8483
const text = `Hello${connection?.variantChars.local}world`;
8584
const basicCommandA = `echo "${IBMi.escapeForShell(text)}"`;
8685
const basicCommandB = `echo '${text}'`;
@@ -110,7 +109,7 @@ describe('Encoding tests', {concurrent: true} ,() => {
110109
expect(paseTextResultA?.stdout).toBe(text);
111110
expect(qshTextResultB?.stdout).toBe(text);
112111
expect(paseTextResultB?.stdout).toBe(text);
113-
});
112+
}, {timeout: 25000});
114113

115114
it('streamfileResolve with dollar', async () => {
116115
await connection.withTempDirectory(async tempDir => {

0 commit comments

Comments
 (0)