Skip to content

Solution#479

Open
luchali wants to merge 3 commits intomate-academy:masterfrom
luchali:develop
Open

Solution#479
luchali wants to merge 3 commits intomate-academy:masterfrom
luchali:develop

Conversation

@luchali
Copy link

@luchali luchali commented Feb 14, 2026

No description provided.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

I am requesting changes because several core task requirements are not yet met, and they will likely cause the grader/tester to fail your solution. You placed the implementation in src/app.js, but the task explicitly requires the CLI entry point to be app.js at the project root, so the tests will not find your script. You also need to strictly validate arguments: enforce that there are exactly two non-flag arguments (no extras, and reject anything starting with -), and exit with a non‑zero status when this is not satisfied. Before copying, add checks using fs.stat/fs.lstat to ensure the source exists and is a regular file, and that the destination is not the same path (and not a directory). Finally, in all error cases (missing args, invalid paths, copy failure), log with console.error(...) and then either throw or process.exit(1) so failures are visible to the tests instead of just returning. Once these behavioral issues are fixed, your use of fs.copyFile and the basic copy logic will align well with the requirements.


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Important

Fix the issues, commit the changes, and then re-request my review using the Re-request review button2 in the Reviewers tab.

Tip

If you have any comments about this review, please leave a message in the Add a comment section below and mention me with the @mateacademy-ai-mentor tag3.
I will read your message during my next review of your pull request. Please do not reply directly to my comments, as that feature is not supported yet.

Caution

Do not close the pull request until the review is complete. Closing it early can lead to unexpected behavior and disrupt the review process.

Footnotes

  1. Rate AI review example

  2. Re-request AI review example

  3. Add AI review comments example

src/app.js Outdated
@@ -1 +1,28 @@
/* eslint-disable no-console */

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The task requires the app to be placed in app.js at the project root. This file is src/app.js — move the implementation to the required app.js location so the grader/tester finds it.

src/app.js Outdated
Comment on lines 7 to 9
const params = process.argv.slice(2);
const sourceTerminal = params[0];
const destTerminal = params[1];

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You extract arguments but do not enforce that exactly two plain arguments are provided. Add a check like if (params.length !== 2) { console.error('Please enter source and destination'); process.exit(1); } and reject any arguments that look like flags (start with -) to satisfy the "no flags" requirement.

src/app.js Outdated
Comment on lines 11 to 14
if (!sourceTerminal || !destTerminal) {
console.error('Please enter source and destination');

return;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When source or destination is missing you console.error() and return. The spec requires error cases to be reported — after logging you should terminate with a non-zero exit code (e.g. process.exit(1)) or throw so the failure is visible to the caller/tests.

src/app.js Outdated
return;
}

fs.copyFile(sourceTerminal, destTerminal, (err) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before copying, validate that the source is a regular file (use fs.stat/fs.lstat) and that destination is not the same path; this ensures you only copy files (not directories) as required.

src/app.js Outdated
Comment on lines 21 to 24
fs.copyFile(sourceTerminal, destTerminal, (err) => {
if (err) {
console.error('Error copying file:', err.message);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On copy error you only log the error. The requirement states to "throw an error with the console.error() command" — after console.error(...) you should either throw the error or call process.exit(1) so the script fails loudly for the test harness.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

I am requesting changes because several core requirements of the CLI tool are not yet met, which will prevent the grader from passing your solution. The CLI entrypoint is still at src/app.js instead of a root-level app.js, so node app.js will not run your implementation at all. Argument validation currently logs errors but often just returns (e.g., when params.length !== 2), which exits with status 0; you must console.error(...) and then either throw or process.exit(1) for all invalid-usage and failure cases. Before copying, you need to fs.stat or fs.lstat the source path and ensure stats.isFile() is true, and also stat the destination if it exists to fail when it is a directory (stats.isDirectory()), exiting non‑zero on failure. Your same-path detection currently compares raw strings; instead, use path.resolve (or fs.realpath) on both source and destination and compare the resolved paths so that variants like ./file and file are treated as the same location. Once you move the script to app.js at the project root, enforce exactly two non-flag arguments, normalize paths before comparison, add the required stat/isFile/isDirectory checks, and ensure every error path both logs with console.error and exits non-zero, your solution should align well with the task requirements. Keep the existing fs.copyFile usage and flag rejection logic; you’re close, and these targeted fixes will make your CLI robust and fully compliant.


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Important

Fix the issues, commit the changes, and then re-request my review using the Re-request review button2 in the Reviewers tab.

Tip

If you have any comments about this review, please leave a message in the Add a comment section below and mention me with the @mateacademy-ai-mentor tag3.
I will read your message during my next review of your pull request. Please do not reply directly to my comments, as that feature is not supported yet.

Caution

Do not close the pull request until the review is complete. Closing it early can lead to unexpected behavior and disrupt the review process.

Footnotes

  1. Rate AI review example

  2. Re-request AI review example

  3. Add AI review comments example

src/app.js Outdated
@@ -1 +1,34 @@
/* eslint-disable no-console */

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The task requires the CLI entry point to be app.js at the project root so the grader can find it. This file is currently src/app.js — move the implementation to app.js at the project root.

src/app.js Outdated
Comment on lines 12 to 15
if (params.length !== 2 || !sourceTerminal || !destTerminal) {
console.error('Please enter source and destination');

return;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Argument validation logs an error but uses return (silently) when params.length !== 2. Per the requirements, after console.error(...) you must either throw or call process.exit(1) so failures are visible to the tests.

src/app.js Outdated
'use strict';

const fs = require('fs');
// const path = require('path');

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You commented out path (line 5). Use const path = require('path') (or fs.realpath) and normalize/resolve both source and destination before comparing them to reliably detect attempts to copy to the same location (e.g. ./file vs file).

src/app.js Outdated
Comment on lines 23 to 24
if (sourceTerminal === destTerminal) {
return;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comparing sourceTerminal === destTerminal on raw strings can miss equivalent paths. Resolve paths first (e.g. path.resolve or fs.realpath) and then compare; doing nothing is acceptable when they are the same, but detection must be robust.

src/app.js Outdated
Comment on lines 8 to 27
const params = process.argv.slice(2);
const sourceTerminal = params[0];
const destTerminal = params[1];

if (params.length !== 2 || !sourceTerminal || !destTerminal) {
console.error('Please enter source and destination');

return;
}

if (sourceTerminal.startsWith('-') || destTerminal.startsWith('-')) {
console.error('Flags are not supported');
process.exit(1);
}

if (sourceTerminal === destTerminal) {
return;
}

fs.copyFile(sourceTerminal, destTerminal, (err) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Before calling fs.copyFile you must fs.stat/fs.lstat the source to ensure it exists and is a regular file (check stats.isFile()). I don't see any stat/lstat checks — add them and on error console.error(...) then exit non-zero.

src/app.js Outdated
return;
}

fs.copyFile(sourceTerminal, destTerminal, (err) => {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You must also check the destination: if it exists and is a directory (stats.isDirectory()), log with console.error(...) and exit non-zero. That validation is missing prior to the fs.copyFile call.

src/app.js Outdated
Comment on lines 27 to 31
fs.copyFile(sourceTerminal, destTerminal, (err) => {
if (err) {
console.error('Error copying file:', err.message);
}
});

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the fs.copyFile callback you log the error but do not throw or process.exit(1) (lines 27-31). Per requirements, on copy failure you must console.error(...) and then either throw or process.exit(1) so the test harness notices the failure.

src/app.js Outdated
Comment on lines 18 to 21
if (sourceTerminal.startsWith('-') || destTerminal.startsWith('-')) {
console.error('Flags are not supported');
process.exit(1);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The flags check (startsWith('-')) is present and calls process.exit(1) which is correct behavior — ensure you still enforce exactly two non-flag arguments (no extras) and exit non-zero on invalid usages.

Copy link

@mateacademy-ai-mentor mateacademy-ai-mentor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

I am approving your submission as an educational override to help you progress, but please review the following feedback for your next steps. You've done a great job implementing the argument parsing and file system checks! However, there are a few critical adjustments needed to meet all requirements.

Here are the main points to focus on:

  • Exit Codes: For any error, the script must exit with a non-zero status code, such as process.exit(1), to signal failure correctly.
  • Path Comparison: To accurately detect if the source and destination are the same file, you should compare their resolved absolute paths using path.resolve(). Comparing strings directly isn't reliable for cases like file.txt vs. ./file.txt.
  • File Location: The project's entry point must be a single app.js file in the root directory, not inside a src folder.

Keep up the great work, and remember to apply these corrections in your future tasks!


✨ Please rate this review in the Platform's notification center1. I will be grateful for your feedback! ✨

Footnotes

  1. Rate AI review example


if (params.length !== 2 || !sourceTerminal || !destTerminal) {
console.error('Please enter source and destination');
process.exit(0);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When the script exits due to an error, it should use a non-zero status code to signal failure. The standard convention is process.exit(1). process.exit(0) is used only for successful execution. This change should be applied to all error paths where you currently exit with 0.

process.exit(0);
}

if (sourceTerminal === destTerminal) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comparing path strings directly can fail to detect when two different paths point to the same file (e.g., './file.txt' and 'file.txt'). To correctly check if the source and destination are the same, you should compare their resolved, absolute paths. You can achieve this using path.resolve() from the built-in path module.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants