Skip to content

Add outlook calendargroup get command. Closes #7111#7166

Draft
AlejandroGispert wants to merge 2 commits intopnp:mainfrom
AlejandroGispert:feature/outlook-calendargroup-get
Draft

Add outlook calendargroup get command. Closes #7111#7166
AlejandroGispert wants to merge 2 commits intopnp:mainfrom
AlejandroGispert:feature/outlook-calendargroup-get

Conversation

@AlejandroGispert
Copy link
Copy Markdown
Contributor

@AlejandroGispert AlejandroGispert commented Mar 20, 2026

Closes #7111

Summary
Adds the missing m365 outlook calendargroup get command to retrieve a specific calendar group for a user, supporting lookup by either --id or --name (with --name resolving to an id via OData filtering).

Details
Implements m365 outlook calendargroup get with delegated vs app-only permission handling.
Enforces mutually exclusive --id/--name and --userId/--userName.
Adds unit tests and a docs page, and wires the command into the docs sidebar.

@AlejandroGispert AlejandroGispert force-pushed the feature/outlook-calendargroup-get branch from 46032d6 to 3da5852 Compare March 20, 2026 14:51
@AlejandroGispert AlejandroGispert marked this pull request as draft March 20, 2026 15:05
@AlejandroGispert AlejandroGispert force-pushed the feature/outlook-calendargroup-get branch from e63aaba to d002fb8 Compare March 20, 2026 15:57
@AlejandroGispert AlejandroGispert marked this pull request as ready for review March 20, 2026 16:01
@AlejandroGispert
Copy link
Copy Markdown
Contributor Author

Hi @milanholemans @MartinM85 , Can you check my PR?

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds the missing m365 outlook calendargroup get command to the CLI for Microsoft 365 to retrieve a specific Outlook calendar group for a user, supporting lookup by either --id or --name, and documenting/validating delegated vs app-only behavior.

Changes:

  • Introduces outlook calendargroup get command implementation with Zod validation and Graph calls
  • Adds unit tests covering key permission/lookup scenarios
  • Adds documentation page and wires it into the Docusaurus sidebar

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/m365/outlook/commands/calendargroup/calendargroup-get.ts Implements the new calendargroup get command, including permission handling and name-to-id resolution
src/m365/outlook/commands/calendargroup/calendargroup-get.spec.ts Adds unit tests for the new command (id/name, delegated/app-only, shared-scope handling)
src/m365/outlook/commands.ts Registers the new command name constant
docs/src/config/sidebars.ts Adds the new command docs page to the Outlook sidebar group
docs/docs/cmd/outlook/calendargroup/calendargroup-get.mdx Adds reference documentation for outlook calendargroup get

…rs for API requests

- Updated the command to encode user identifiers before constructing API URLs.
- Adjusted test cases to reflect changes in user identifier handling.
@AlejandroGispert
Copy link
Copy Markdown
Contributor Author

Hi @milanholemans @MartinM85 , Can you check my PR?

@MartinM85 MartinM85 self-assigned this Apr 2, 2026
Copy link
Copy Markdown
Contributor

@MartinM85 MartinM85 left a comment

Choose a reason for hiding this comment

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

Hi @AlejandroGispert, great start 👍.

I have a couple of comments, nothing major.

Comment on lines +85 to +88
"id": "id-value",
"name": "name-value",
"changeKey": "changeKey-value",
"classId": "classId-value"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you please improve the response? It would be better use some "real" values instead of the id-value, etc.
Check the response for the similar command outlook calendargroup list

```text
id | name
------------------------------------------------------------------ ----------------
id-value name-value
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you please improve the response? It would be better use some "real" values instead of the id-value, etc.
Check the response for the similar command outlook calendargroup list


```csv
id,name
id-value,name-value
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you please improve the response? It would be better use some "real" values instead of the id-value, etc.
Check the response for the similar command outlook calendargroup list

Comment on lines +119 to +120
id | id-value
name | name-value
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you please improve the response? It would be better use some "real" values instead of the id-value, etc.
Check the response for the similar command outlook calendargroup list

Comment on lines +58 to +60
public defaultProperties(): string[] | undefined {
return ['id', 'name'];
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please remove it. We define the default properties only for the list commands.

Comment on lines +99 to +110
const getCalendarGroupId = async (calendarGroupName: string): Promise<string> => {
const userPath = encodedUserIdentifier ? `users('${encodedUserIdentifier}')` : 'me';
const calendarGroups = await odata.getAllItems<CalendarGroup>(
`${this.resource}/v1.0/${userPath}/calendarGroups?$select=id,name&$filter=name eq '${formatting.encodeQueryParameter(calendarGroupName)}'`
);

if (calendarGroups.length === 0) {
throw `The specified calendar group '${calendarGroupName}' does not exist.`;
}

return calendarGroups[0].id!;
};
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This method already returns the calendar group. No need to call the endpoint again to get the calendar group by id.

Suggested change
const getCalendarGroupId = async (calendarGroupName: string): Promise<string> => {
const userPath = encodedUserIdentifier ? `users('${encodedUserIdentifier}')` : 'me';
const calendarGroups = await odata.getAllItems<CalendarGroup>(
`${this.resource}/v1.0/${userPath}/calendarGroups?$select=id,name&$filter=name eq '${formatting.encodeQueryParameter(calendarGroupName)}'`
);
if (calendarGroups.length === 0) {
throw `The specified calendar group '${calendarGroupName}' does not exist.`;
}
return calendarGroups[0].id!;
};
const getCalendarGroupByName = async (calendarGroupName: string): Promise<CalendarGroup> => {
const userPath = encodedUserIdentifier ? `users('${encodedUserIdentifier}')` : 'me';
const calendarGroups = await odata.getAllItems<CalendarGroup>(
`${this.resource}/v1.0/${userPath}/calendarGroups?$filter=name eq '${formatting.encodeQueryParameter(calendarGroupName)}'`
);
if (calendarGroups.length === 0) {
throw `The specified calendar group '${calendarGroupName}' does not exist.`;
}
return calendarGroups[0];
};

@MartinM85 MartinM85 marked this pull request as draft April 2, 2026 17:31
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.

New command: outlook calendargroup get

3 participants