Fix bug where you weren't able to use both the -q and -j flags at the same time #227

Merged
Vylpes merged 17 commits from feature/181-q-json-flags into develop 2024-12-07 22:21:43 +00:00
3 changed files with 70 additions and 39 deletions

View file

@ -5,36 +5,28 @@ export default class OutputHelper {
public static GenerateOutput(response: IReturnResult, options: ICliOptions): string { public static GenerateOutput(response: IReturnResult, options: ICliOptions): string {
const result = response.Result!; const result = response.Result!;
const outputLines: string[] = []; let outputObject = {};
outputObject = { ...result };
if (options.queryMetadata) {
outputObject = { ...outputObject, ...response.Query }
}
if (options.json) { if (options.json) {
return JSON.stringify(result); return JSON.stringify(outputObject);
} }
outputLines.push(`Archived = ${result.Archived}`); return this.GetFriendlyObjectText(outputObject);
outputLines.push(`Author = ${result.Author}`);
outputLines.push(`Downvotes = ${result.Downs}`);
if (result.Gallery.length > 1) {
outputLines.push(`Gallery = ${result.Gallery.join(", ")}`);
} }
outputLines.push(`Hidden = ${result.Hidden}`); private static GetFriendlyObjectText<T>(object: T): string {
const output: string[] = [];
outputLines.push(`Permalink = ${result.Permalink}`); for (const key in object) {
outputLines.push(`Subreddit = ${result.Subreddit}`); output.push(`${key} = ${object[key]}`);
outputLines.push(`Subreddit Subscribers = ${result.SubredditSubscribers}`);
outputLines.push(`Title = ${result.Title}`);
outputLines.push(`Upvotes = ${result.Ups}`);
outputLines.push(`Url = ${result.Url}`);
if (options.queryMetadata != null) {
outputLines.push(`Query.Subreddit = ${response.Query.subreddit}`);
outputLines.push(`Query.Sort By = ${response.Query.sortBy}`);
outputLines.push(`Query.Limit = ${response.Query.limit}`);
} }
return outputLines.join("\n"); return output.join("\n");
} }
} }

View file

@ -3,44 +3,48 @@
exports[`GenerateOutput EXPECT standout output to be returned 1`] = ` exports[`GenerateOutput EXPECT standout output to be returned 1`] = `
"Archived = false "Archived = false
Author = author Author = author
Downvotes = 0 Downs = 0
Hidden = false Hidden = false
Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/ Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/
Subreddit = Rabbits Subreddit = Rabbits
SubredditSubscribers = 654751 SubredditSubscribers = 654751
Title = This is my Ms Bear! Title = This is my Ms Bear!
Upvotes = 17 Ups = 17
Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d" Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d
Gallery = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"
`; `;
exports[`GenerateOutput GIVEN options.json is true, EXPECT output to be returned as JSON 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d","Gallery":["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"]}"`; exports[`GenerateOutput GIVEN options.json is true, EXPECT output to be returned as JSON 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d","Gallery":["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"]}"`;
exports[`GenerateOutput GIVEN options.queryMetadata AND options.json is supplied, EXPECT query metadata to be in JSON format 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d","subreddit":"rabbits","sortBy":"hot","limit":100}"`;
exports[`GenerateOutput GIVEN options.queryMetadata is supplied, EXPECT query metadata to be added 1`] = ` exports[`GenerateOutput GIVEN options.queryMetadata is supplied, EXPECT query metadata to be added 1`] = `
"Archived = false "Archived = false
Author = author Author = author
Downvotes = 0 Downs = 0
Hidden = false Hidden = false
Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/ Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/
Subreddit = Rabbits Subreddit = Rabbits
SubredditSubscribers = 654751 SubredditSubscribers = 654751
Title = This is my Ms Bear! Title = This is my Ms Bear!
Upvotes = 17 Ups = 17
Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d
Query.Subreddit = rabbits Gallery = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d
Query.Sort By = hot subreddit = rabbits
Query.Limit = 100" sortBy = hot
limit = 100"
`; `;
exports[`GenerateOutput GIVEN the Gallery input has more than 1 item, EXPECT Gallery line to be added 1`] = ` exports[`GenerateOutput GIVEN the Gallery input has more than 1 item, EXPECT Gallery line to be added 1`] = `
"Archived = false "Archived = false
Author = author Author = author
Downvotes = 0 Downs = 0
Gallery = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d, https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d
Hidden = false Hidden = false
Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/ Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/
Subreddit = Rabbits Subreddit = Rabbits
SubredditSubscribers = 654751 SubredditSubscribers = 654751
Title = This is my Ms Bear! Title = This is my Ms Bear!
Upvotes = 17 Ups = 17
Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d" Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d
Gallery = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d,https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"
`; `;

View file

@ -106,6 +106,41 @@ describe("GenerateOutput", () => {
expect(result).toMatchSnapshot(); expect(result).toMatchSnapshot();
}); });
test("GIVEN options.queryMetadata AND options.json is supplied, EXPECT query metadata to be in JSON format", () => {
// Arrange
const response = {
IsSuccess: true,
Query: {
subreddit: "rabbits",
sortBy: "hot",
limit: 100,
},
Result: {
Archived: false,
Author: 'author',
Downs: 0,
Hidden: false,
Permalink: "/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/",
Subreddit: "Rabbits",
SubredditSubscribers: 654751,
Title: "This is my Ms Bear!",
Ups: 17,
Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d",
},
} as IReturnResult;
const options = {
json: true,
queryMetadata: true,
} as ICliOptions;
// Act
const result = OutputHelper.GenerateOutput(response, options);
// Assert
expect(result).toMatchSnapshot();
});
test("GIVEN the Gallery input has more than 1 item, EXPECT Gallery line to be added", () => { test("GIVEN the Gallery input has more than 1 item, EXPECT Gallery line to be added", () => {
// Arrange // Arrange
const response = { const response = {