abapgit-agent 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/abap/guidelines/00_index.md +35 -0
- package/abap/guidelines/01_sql.md +72 -0
- package/abap/guidelines/02_exceptions.md +108 -0
- package/abap/guidelines/03_testing.md +252 -0
- package/abap/guidelines/04_cds.md +120 -0
- package/abap/guidelines/05_classes.md +50 -0
- package/abap/guidelines/06_objects.md +103 -0
- package/abap/guidelines/07_json.md +22 -0
- package/abap/guidelines/08_abapgit.md +193 -0
- package/bin/abapgit-agent +597 -44
- package/bin/abgagt +24 -0
- package/package.json +11 -3
- package/src/abap-client.js +65 -2
- package/src/agent.js +58 -4
- package/src/config.js +9 -2
- package/src/ref-search.js +989 -0
- package/.abapGitAgent.example +0 -11
- package/.github/workflows/release.yml +0 -57
- package/API.md +0 -710
- package/CLAUDE.md +0 -1031
- package/CLAUDE_MEM.md +0 -88
- package/ERROR_HANDLING.md +0 -30
- package/INSTALL.md +0 -155
- package/RELEASE_NOTES.md +0 -143
- package/abap/CLAUDE.md +0 -898
- package/abap/copilot-instructions.md +0 -79
- package/abap/package.devc.xml +0 -10
- package/abap/zcl_abgagt_agent.clas.abap +0 -420
- package/abap/zcl_abgagt_agent.clas.xml +0 -15
- package/abap/zcl_abgagt_cmd_factory.clas.abap +0 -48
- package/abap/zcl_abgagt_cmd_factory.clas.xml +0 -15
- package/abap/zcl_abgagt_command_create.clas.abap +0 -95
- package/abap/zcl_abgagt_command_create.clas.xml +0 -15
- package/abap/zcl_abgagt_command_import.clas.abap +0 -138
- package/abap/zcl_abgagt_command_import.clas.xml +0 -15
- package/abap/zcl_abgagt_command_inspect.clas.abap +0 -411
- package/abap/zcl_abgagt_command_inspect.clas.testclasses.abap +0 -121
- package/abap/zcl_abgagt_command_inspect.clas.xml +0 -16
- package/abap/zcl_abgagt_command_preview.clas.abap +0 -386
- package/abap/zcl_abgagt_command_preview.clas.xml +0 -15
- package/abap/zcl_abgagt_command_pull.clas.abap +0 -80
- package/abap/zcl_abgagt_command_pull.clas.testclasses.abap +0 -87
- package/abap/zcl_abgagt_command_pull.clas.xml +0 -16
- package/abap/zcl_abgagt_command_tree.clas.abap +0 -237
- package/abap/zcl_abgagt_command_tree.clas.xml +0 -15
- package/abap/zcl_abgagt_command_unit.clas.abap +0 -297
- package/abap/zcl_abgagt_command_unit.clas.xml +0 -15
- package/abap/zcl_abgagt_command_view.clas.abap +0 -240
- package/abap/zcl_abgagt_command_view.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_create.clas.abap +0 -71
- package/abap/zcl_abgagt_resource_create.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_health.clas.abap +0 -25
- package/abap/zcl_abgagt_resource_health.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_import.clas.abap +0 -66
- package/abap/zcl_abgagt_resource_import.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_inspect.clas.abap +0 -62
- package/abap/zcl_abgagt_resource_inspect.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_preview.clas.abap +0 -67
- package/abap/zcl_abgagt_resource_preview.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_pull.clas.abap +0 -71
- package/abap/zcl_abgagt_resource_pull.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_tree.clas.abap +0 -70
- package/abap/zcl_abgagt_resource_tree.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_unit.clas.abap +0 -64
- package/abap/zcl_abgagt_resource_unit.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_view.clas.abap +0 -68
- package/abap/zcl_abgagt_resource_view.clas.xml +0 -15
- package/abap/zcl_abgagt_rest_handler.clas.abap +0 -32
- package/abap/zcl_abgagt_rest_handler.clas.xml +0 -15
- package/abap/zcl_abgagt_util.clas.abap +0 -93
- package/abap/zcl_abgagt_util.clas.testclasses.abap +0 -84
- package/abap/zcl_abgagt_util.clas.xml +0 -16
- package/abap/zcl_abgagt_viewer_clas.clas.abap +0 -58
- package/abap/zcl_abgagt_viewer_clas.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_ddls.clas.abap +0 -83
- package/abap/zcl_abgagt_viewer_ddls.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_dtel.clas.abap +0 -98
- package/abap/zcl_abgagt_viewer_dtel.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_factory.clas.abap +0 -41
- package/abap/zcl_abgagt_viewer_factory.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_intf.clas.abap +0 -58
- package/abap/zcl_abgagt_viewer_intf.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_stru.clas.abap +0 -59
- package/abap/zcl_abgagt_viewer_stru.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_tabl.clas.abap +0 -59
- package/abap/zcl_abgagt_viewer_tabl.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_ttyp.clas.abap +0 -93
- package/abap/zcl_abgagt_viewer_ttyp.clas.xml +0 -15
- package/abap/zif_abgagt_agent.intf.abap +0 -53
- package/abap/zif_abgagt_agent.intf.xml +0 -15
- package/abap/zif_abgagt_cmd_factory.intf.abap +0 -7
- package/abap/zif_abgagt_cmd_factory.intf.xml +0 -15
- package/abap/zif_abgagt_command.intf.abap +0 -26
- package/abap/zif_abgagt_command.intf.xml +0 -15
- package/abap/zif_abgagt_util.intf.abap +0 -28
- package/abap/zif_abgagt_util.intf.xml +0 -15
- package/abap/zif_abgagt_viewer.intf.abap +0 -12
- package/abap/zif_abgagt_viewer.intf.xml +0 -15
- package/docs/commands.md +0 -142
- package/docs/create-command.md +0 -129
- package/docs/health-command.md +0 -89
- package/docs/import-command.md +0 -195
- package/docs/init-command.md +0 -189
- package/docs/inspect-command.md +0 -158
- package/docs/preview-command.md +0 -528
- package/docs/pull-command.md +0 -188
- package/docs/status-command.md +0 -68
- package/docs/tree-command.md +0 -303
- package/docs/unit-command.md +0 -167
- package/docs/view-command.md +0 -501
- package/img/claude.png +0 -0
- package/scripts/claude-integration.js +0 -351
- package/scripts/release.sh +0 -60
- package/scripts/test-integration.js +0 -139
package/docs/status-command.md
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# status Command Requirements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Check if ABAP integration is configured for the current repository.
|
|
6
|
-
|
|
7
|
-
## Command
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
abapgit-agent status
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Tasks
|
|
14
|
-
|
|
15
|
-
### 1. Check Configuration File
|
|
16
|
-
|
|
17
|
-
Check if `.abapGitAgent` exists in current directory:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
test -f .abapGitAgent
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### 2. Display Status
|
|
24
|
-
|
|
25
|
-
| Status | Output |
|
|
26
|
-
|--------|--------|
|
|
27
|
-
| Configured | `✅ ABAP Git Agent is ENABLED` with config location |
|
|
28
|
-
| Not configured | `❌ ABAP Git Agent is NOT configured` |
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Output Examples
|
|
33
|
-
|
|
34
|
-
### Configured
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
✅ ABAP Git Agent is ENABLED
|
|
38
|
-
Config location: /path/to/repo/.abapGitAgent
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Not Configured
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
❌ ABAP Git Agent is NOT configured
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Used By
|
|
50
|
-
|
|
51
|
-
- `create` command - validates configuration exists before creating repo
|
|
52
|
-
|
|
53
|
-
## Related Files
|
|
54
|
-
|
|
55
|
-
| File | Description |
|
|
56
|
-
|------|-------------|
|
|
57
|
-
| `.abapGitAgent` | Configuration file with ABAP connection details |
|
|
58
|
-
| `.abapGitAgent.sample` | Template file |
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Example
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
$ abapgit-agent status
|
|
66
|
-
✅ ABAP Git Agent is ENABLED
|
|
67
|
-
Config location: /Users/user/project/.abapGitAgent
|
|
68
|
-
```
|
package/docs/tree-command.md
DELETED
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
# tree Command Requirements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Display the package hierarchy tree from an ABAP system, showing parent packages, sub-packages, and object counts.
|
|
6
|
-
|
|
7
|
-
## Command
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# Basic usage
|
|
11
|
-
abapgit-agent tree --package $ZMY_PACKAGE
|
|
12
|
-
|
|
13
|
-
# With object breakdown
|
|
14
|
-
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
15
|
-
|
|
16
|
-
# Limit depth
|
|
17
|
-
abapgit-agent tree --package $ZMY_PACKAGE --depth 3
|
|
18
|
-
|
|
19
|
-
# JSON output for scripting (pure machine-readable)
|
|
20
|
-
abapgit-agent tree --package $ZMY_PACKAGE --json
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Prerequisite
|
|
24
|
-
|
|
25
|
-
- `.abapGitAgent` exists with valid credentials
|
|
26
|
-
- Package must exist in the ABAP system
|
|
27
|
-
|
|
28
|
-
## Parameters
|
|
29
|
-
|
|
30
|
-
| Parameter | Required | Description |
|
|
31
|
-
|-----------|----------|-------------|
|
|
32
|
-
| `--package` | Yes | ABAP package name (e.g., `$ZMY_PACKAGE`, `ZMY_PACKAGE`) |
|
|
33
|
-
| `--depth` | No | Maximum depth to traverse (default: 3) |
|
|
34
|
-
| `--include-objects` | No | Include object counts breakdown |
|
|
35
|
-
| `--json` | No | Output raw JSON only (for scripting) |
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Tasks
|
|
40
|
-
|
|
41
|
-
### 1. Validate Parameters
|
|
42
|
-
|
|
43
|
-
- `--package` must be specified
|
|
44
|
-
- Package name must be valid (1-30 characters, start with letter or `$`)
|
|
45
|
-
|
|
46
|
-
### 2. Load Configuration
|
|
47
|
-
|
|
48
|
-
Read `.abapGitAgent` for credentials
|
|
49
|
-
|
|
50
|
-
### 3. Fetch CSRF Token
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
GET /health (with X-CSRF-Token: fetch)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 4. Make Tree Request
|
|
57
|
-
|
|
58
|
-
**Endpoint:** `POST /tree`
|
|
59
|
-
|
|
60
|
-
**Request Body:**
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"package": "$ZMY_PACKAGE",
|
|
64
|
-
"depth": 3,
|
|
65
|
-
"include_objects": true
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### 5. Display Results
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Output
|
|
74
|
-
|
|
75
|
-
### Basic Tree
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
79
|
-
|
|
80
|
-
📦 $ZMAIN_PACKAGE (Main Package)
|
|
81
|
-
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
82
|
-
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
83
|
-
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
84
|
-
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
85
|
-
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
86
|
-
|
|
87
|
-
📊 Summary
|
|
88
|
-
PACKAGES: 6
|
|
89
|
-
OBJECTS: 127
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### With Object Counts
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
96
|
-
|
|
97
|
-
📦 $ZMAIN_PACKAGE (Main Package)
|
|
98
|
-
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
99
|
-
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
100
|
-
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
101
|
-
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
102
|
-
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
103
|
-
|
|
104
|
-
📊 Summary
|
|
105
|
-
PACKAGES: 6
|
|
106
|
-
OBJECTS: 127
|
|
107
|
-
TYPES: CLAS=10 INTF=2 PROG=11 FUGR=1 TABL=3
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### With Parent Package
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
114
|
-
|
|
115
|
-
⬆️ Parent: $ZSAP_BASE (SAP Base Package)
|
|
116
|
-
|
|
117
|
-
📦 $ZMAIN_PACKAGE (Main Package)
|
|
118
|
-
└─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
119
|
-
|
|
120
|
-
📊 Summary
|
|
121
|
-
PACKAGES: 2
|
|
122
|
-
OBJECTS: 15
|
|
123
|
-
TYPES: CLAS=5 PROG=10
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### JSON Output
|
|
127
|
-
|
|
128
|
-
```json
|
|
129
|
-
{
|
|
130
|
-
"SUCCESS": true,
|
|
131
|
-
"COMMAND": "TREE",
|
|
132
|
-
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
133
|
-
"MESSAGE": "Tree retrieved successfully",
|
|
134
|
-
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
135
|
-
"NODES": [
|
|
136
|
-
{
|
|
137
|
-
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
138
|
-
"PARENT": "",
|
|
139
|
-
"DESCRIPTION": "$ZMAIN_PACKAGE",
|
|
140
|
-
"DEPTH": 0,
|
|
141
|
-
"OBJECT_COUNT": 11
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"PACKAGE": "$ZMAIN_SUB1",
|
|
145
|
-
"PARENT": "$ZMAIN_PACKAGE",
|
|
146
|
-
"DESCRIPTION": "Sub Package 1",
|
|
147
|
-
"DEPTH": 1,
|
|
148
|
-
"OBJECT_COUNT": 10
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"PACKAGE": "$ZMAIN_SUB1_A",
|
|
152
|
-
"PARENT": "$ZMAIN_SUB1",
|
|
153
|
-
"DESCRIPTION": "Sub Package 1A",
|
|
154
|
-
"DEPTH": 2,
|
|
155
|
-
"OBJECT_COUNT": 3
|
|
156
|
-
}
|
|
157
|
-
],
|
|
158
|
-
"TOTAL_PACKAGES": 6,
|
|
159
|
-
"TOTAL_OBJECTS": 127,
|
|
160
|
-
"OBJECTS": [
|
|
161
|
-
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
162
|
-
{ "OBJECT": "INTF", "COUNT": 2 },
|
|
163
|
-
{ "OBJECT": "PROG", "COUNT": 11 },
|
|
164
|
-
{ "OBJECT": "FUGR", "COUNT": 1 },
|
|
165
|
-
{ "OBJECT": "TABL", "COUNT": 3 }
|
|
166
|
-
],
|
|
167
|
-
"ERROR": ""
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
**Response Fields:**
|
|
172
|
-
|
|
173
|
-
| Field | Type | Description |
|
|
174
|
-
|-------|------|-------------|
|
|
175
|
-
| `SUCCESS` | boolean | Whether the request succeeded |
|
|
176
|
-
| `COMMAND` | string | Command name ("TREE") |
|
|
177
|
-
| `PACKAGE` | string | Root package name |
|
|
178
|
-
| `MESSAGE` | string | Status message |
|
|
179
|
-
| `PARENT_PACKAGE` | string | Parent package (empty if root) |
|
|
180
|
-
| `NODES` | array | Flat list of all packages with parent refs |
|
|
181
|
-
| `TOTAL_PACKAGES` | number | Total packages in tree |
|
|
182
|
-
| `TOTAL_OBJECTS` | number | Total objects in tree |
|
|
183
|
-
| `OBJECTS` | array | Object counts by type [{OBJECT, COUNT}] |
|
|
184
|
-
| `ERROR` | string | Error message (empty if success) |
|
|
185
|
-
|
|
186
|
-
**Node Structure:**
|
|
187
|
-
|
|
188
|
-
Each entry in `NODES` array:
|
|
189
|
-
|
|
190
|
-
| Field | Type | Description |
|
|
191
|
-
|-------|------|-------------|
|
|
192
|
-
| `PACKAGE` | string | Package name |
|
|
193
|
-
| `PARENT` | string | Parent package name |
|
|
194
|
-
| `DESCRIPTION` | string | Package description |
|
|
195
|
-
| `DEPTH` | number | Depth in tree (0 = root) |
|
|
196
|
-
| `OBJECT_COUNT` | number | Objects in this package |
|
|
197
|
-
|
|
198
|
-
**Note:** The `NODES` array is flat - children are identified by `PARENT` reference. The CLI builds the tree display by grouping nodes by depth and parent.
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## Response Structure
|
|
203
|
-
|
|
204
|
-
### JSON Mode
|
|
205
|
-
|
|
206
|
-
```json
|
|
207
|
-
{
|
|
208
|
-
"SUCCESS": true,
|
|
209
|
-
"COMMAND": "TREE",
|
|
210
|
-
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
211
|
-
"MESSAGE": "Tree retrieved successfully",
|
|
212
|
-
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
213
|
-
"NODES": [...],
|
|
214
|
-
"TOTAL_PACKAGES": 6,
|
|
215
|
-
"TOTAL_OBJECTS": 127,
|
|
216
|
-
"OBJECTS": [
|
|
217
|
-
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
218
|
-
{ "OBJECT": "INTF", "COUNT": 2 }
|
|
219
|
-
],
|
|
220
|
-
"ERROR": ""
|
|
221
|
-
}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
See [JSON Output](#json-output-pure-scripting) for full schema.
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## Error Handling
|
|
229
|
-
|
|
230
|
-
| Error | Message |
|
|
231
|
-
|-------|---------|
|
|
232
|
-
| Package not found | `Package <name> does not exist in the system` |
|
|
233
|
-
| Invalid package name | `Invalid package name: <name>` |
|
|
234
|
-
| Access denied | `Access denied to package information` |
|
|
235
|
-
| Depth too large | `Depth value too large (max: 10)` |
|
|
236
|
-
|
|
237
|
-
### Error Output
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
❌ Package not found: $ZNONEXISTENT
|
|
241
|
-
|
|
242
|
-
Error: Package $ZNONEXISTENT does not exist in the system.
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Example
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
# Basic usage
|
|
251
|
-
abapgit-agent tree --package $ZMY_PACKAGE
|
|
252
|
-
|
|
253
|
-
# With object breakdown
|
|
254
|
-
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
255
|
-
|
|
256
|
-
# Shallow tree (depth 1)
|
|
257
|
-
abapgit-agent tree --package $ZMY_PACKAGE --depth 1
|
|
258
|
-
|
|
259
|
-
# JSON for scripting
|
|
260
|
-
abapgit-agent tree --package $ZMY_PACKAGE --json > tree.json
|
|
261
|
-
|
|
262
|
-
# CI/CD usage with jq
|
|
263
|
-
COUNT=$(abapgit-agent tree --package $ZMY_PACKAGE --json | jq '.TOTAL_OBJECTS')
|
|
264
|
-
echo "Package contains $COUNT objects"
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## Implementation
|
|
270
|
-
|
|
271
|
-
### ABAP Tables Used
|
|
272
|
-
|
|
273
|
-
| Table | Purpose |
|
|
274
|
-
|-------|---------|
|
|
275
|
-
| **TDEVC** | Package definitions (contains `PARENTCL` for hierarchy) |
|
|
276
|
-
| **TADIR** | Object directory (for object counts per package) |
|
|
277
|
-
|
|
278
|
-
### Query Logic
|
|
279
|
-
|
|
280
|
-
```abap
|
|
281
|
-
" Get root package with parent
|
|
282
|
-
SELECT SINGLE devclass parentcl FROM tdevc
|
|
283
|
-
INTO ls_package
|
|
284
|
-
WHERE devclass = lv_package.
|
|
285
|
-
|
|
286
|
-
" Get direct sub-packages recursively (up to depth)
|
|
287
|
-
SELECT devclass parentcl FROM tdevc
|
|
288
|
-
INTO TABLE lt_direct_subs
|
|
289
|
-
WHERE parentcl = iv_parent.
|
|
290
|
-
|
|
291
|
-
" Get object count per package
|
|
292
|
-
SELECT COUNT(*) FROM tadir
|
|
293
|
-
INTO lv_count
|
|
294
|
-
WHERE devclass = iv_package
|
|
295
|
-
AND object NOT IN ('DEVC', 'PACK').
|
|
296
|
-
|
|
297
|
-
" Get object counts by type
|
|
298
|
-
SELECT object COUNT(*) AS count FROM tadir
|
|
299
|
-
INTO TABLE lt_counts
|
|
300
|
-
WHERE devclass = iv_package
|
|
301
|
-
AND object NOT IN ('DEVC', 'PACK')
|
|
302
|
-
GROUP BY object.
|
|
303
|
-
```
|
package/docs/unit-command.md
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# unit Command Requirements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Run AUnit tests for ABAP test classes and display detailed results.
|
|
6
|
-
|
|
7
|
-
## Command
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# Single test class file
|
|
11
|
-
abapgit-agent unit --files zcl_my_test.clas.testclasses.abap
|
|
12
|
-
|
|
13
|
-
# Multiple test class files
|
|
14
|
-
abapgit-agent unit --files zcl_test1.clas.testclasses.abap,zcl_test2.clas.testclasses.abap
|
|
15
|
-
|
|
16
|
-
# With path
|
|
17
|
-
abapgit-agent unit --files abap/zcl_my_test.clas.testclasses.abap
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Prerequisite
|
|
21
|
-
|
|
22
|
-
- `.abapGitAgent` exists with valid credentials
|
|
23
|
-
- Files must be test class files (`.testclasses.abap`)
|
|
24
|
-
|
|
25
|
-
## Parameters
|
|
26
|
-
|
|
27
|
-
| Parameter | Required | Description |
|
|
28
|
-
|-----------|----------|-------------|
|
|
29
|
-
| `--files` | Yes | Comma-separated list of test class files |
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Tasks
|
|
34
|
-
|
|
35
|
-
### 1. Validate Parameters
|
|
36
|
-
|
|
37
|
-
- `--files` must be specified
|
|
38
|
-
- Files must be `.testclasses.abap` format
|
|
39
|
-
|
|
40
|
-
### 2. Load Configuration
|
|
41
|
-
|
|
42
|
-
Read `.abapGitAgent` for credentials
|
|
43
|
-
|
|
44
|
-
### 3. Fetch CSRF Token
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
GET /health (with X-CSRF-Token: fetch)
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### 4. Make Unit Request
|
|
51
|
-
|
|
52
|
-
**Endpoint:** `POST /unit`
|
|
53
|
-
|
|
54
|
-
**Request Body:**
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"files": ["ZCL_MY_TEST.CLASS.TESTCLASSES.ABAP"]
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 5. Display Results
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## Output
|
|
66
|
-
|
|
67
|
-
### All Tests Passed
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
Running unit tests for 2 file(s)
|
|
71
|
-
|
|
72
|
-
✅ ZCL_MY_TEST - All tests passed
|
|
73
|
-
Tests: 10 | Passed: 10 | Failed: 0
|
|
74
|
-
|
|
75
|
-
✅ ZCL_OTHER_TEST - All tests passed
|
|
76
|
-
Tests: 5 | Passed: 5 | Failed: 0
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### With Failures
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
Running unit tests for 1 file(s)
|
|
83
|
-
|
|
84
|
-
❌ ZCL_MY_TEST - Tests failed
|
|
85
|
-
Tests: 10 | Passed: 8 | Failed: 2
|
|
86
|
-
✗ ZCL_MY_TEST=>TEST_METHOD_1: Error description
|
|
87
|
-
✗ ZCL_MY_TEST=>TEST_METHOD_2: Another error
|
|
88
|
-
|
|
89
|
-
Failed Tests:
|
|
90
|
-
────────────────────────────────────────────────────────────────────────────────
|
|
91
|
-
✗ ZCL_MY_TEST=>TEST_METHOD_1
|
|
92
|
-
Error: Expected X but got Y
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Response Structure
|
|
98
|
-
|
|
99
|
-
```json
|
|
100
|
-
{
|
|
101
|
-
"success": "X",
|
|
102
|
-
"message": "2 of 10 tests failed",
|
|
103
|
-
"test_count": 10,
|
|
104
|
-
"passed_count": 8,
|
|
105
|
-
"failed_count": 2,
|
|
106
|
-
"errors": [
|
|
107
|
-
{
|
|
108
|
-
"class_name": "ZCL_MY_TEST",
|
|
109
|
-
"method_name": "TEST_METHOD_1",
|
|
110
|
-
"error_kind": "ERROR",
|
|
111
|
-
"error_text": "Expected X but got Y"
|
|
112
|
-
}
|
|
113
|
-
]
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
## Error Handling
|
|
120
|
-
|
|
121
|
-
| Error | Message |
|
|
122
|
-
|-------|---------|
|
|
123
|
-
| File not found | `File not found: <path>` |
|
|
124
|
-
| Invalid format | `Invalid file format: <file>` |
|
|
125
|
-
| No --files specified | `Error: --files parameter required` |
|
|
126
|
-
| No tests found | `➖ <class> - No unit tests` |
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## File Format
|
|
131
|
-
|
|
132
|
-
Test class files must end with `.testclasses.abap`:
|
|
133
|
-
|
|
134
|
-
| File | Test Class |
|
|
135
|
-
|------|------------|
|
|
136
|
-
| `zcl_my_test.clas.testclasses.abap` | ZCL_MY_TEST |
|
|
137
|
-
| `src/tests/zcl_my_test.clas.testclasses.abap` | ZCL_MY_TEST |
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## Error Details
|
|
142
|
-
|
|
143
|
-
When a test fails, output includes:
|
|
144
|
-
- **Class**: The test class name
|
|
145
|
-
- **Method**: Failed test method name (with `=>` notation)
|
|
146
|
-
- **Error Kind**: Type of error (ERROR, FAILURE, etc.)
|
|
147
|
-
- **Error Text**: Detailed error message from AUnit
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Example
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# Run tests
|
|
155
|
-
abapgit-agent unit --files zcl_my_test.clas.testclasses.abap
|
|
156
|
-
|
|
157
|
-
# Multiple
|
|
158
|
-
abapgit-agent unit --files abap/zcl_test1.clas.testclasses.abap,abap/zcl_test2.clas.testclasses.abap
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## Implementation
|
|
162
|
-
|
|
163
|
-
Uses `CL_SUT_AUNIT_RUNNER` to execute tests:
|
|
164
|
-
- `S_CREATE` - Create test runner
|
|
165
|
-
- `run()` - Execute tests
|
|
166
|
-
- `str_results` - Get test statistics
|
|
167
|
-
- `tab_objects` - Get detailed results
|