• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

statuscompliance / status-backend / 14445107526

14 Apr 2025 12:02PM UTC coverage: 30.825% (+3.3%) from 27.524%
14445107526

Pull #116

github

web-flow
Merge 4d3fff34b into e33452978
Pull Request #116: tests(script): added controller

136 of 602 branches covered (22.59%)

Branch coverage included in aggregate %.

499 of 1458 relevant lines covered (34.22%)

2.3 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

81.91
/src/controllers/script.controller.js
1
const SCRIPT_KEY_PREFIX = 'script:';
7✔
2

3
// Helper to build unique keys
4
const buildKey = (id) => `${SCRIPT_KEY_PREFIX}${id}`;
9✔
5

6
export const createScript = async (req, res, v4, redis) => {
7✔
7
  try {
3✔
8
    const {code, metadata } = req.body;
3✔
9
    const id = v4();
3✔
10

11
    if (!code) {
3✔
12
      return res.status(400).json({ error: 'Code is required.' });
1✔
13
    }
14

15
    if (!code.includes('module.exports.main')) {
2✔
16
      return res.status(400).json({ error: 'The code must include a module.exports.main function.' });
1✔
17
    }
18
    const scriptData = {
1✔
19
      code,
20
      metadata: metadata || {},
1!
21
      createdAt: new Date().toISOString(),
22
    };
23
    await redis.set(buildKey(id), JSON.stringify(scriptData));
1✔
24
    return res.status(201).json({ message: 'Script created successfully', id });
1✔
25
  } catch (error) {
26
    console.error('Error creating script:', error);
×
27
    return res.status(500).json({ error: 'Internal server error' });
×
28
  }
29
};
30

31
export const getAllScripts = async (req, res, redis) => {
7✔
32
  try {
2✔
33
    const keys = await redis.keys(`${SCRIPT_KEY_PREFIX}*`);
2✔
34
    const scripts = [];
2✔
35

36
    for (const key of keys) {
2✔
37
      const scriptData = await redis.get(key);
2✔
38
      scripts.push({ id: key.replace(SCRIPT_KEY_PREFIX, ''), ...JSON.parse(scriptData) });
2✔
39
    };
40
    
41
    return res.status(200).json(scripts);
2✔
42
  } catch (error) {
43
    console.error('Error getting all scripts:', error);
×
44
    return res.status(500).json({ error: 'Internal server error' });
×
45
  }
46
};
47

48
export const getScriptById = async (req, res, redis) => {
7✔
49
  try {
2✔
50
    const { id } = req.params;
2✔
51
    const scriptData = await redis.get(buildKey(id));
2✔
52

53
    if (!scriptData) {
2✔
54
      return res.status(404).json({ error: 'Script not found' });
1✔
55
    }
56
    const jsCode = JSON.parse(scriptData).code;
1✔
57
    const parsedCode = jsCode.replace(/\\"/g, '"').replace(/\\n/g, '\n');
1✔
58

59
    return res.status(200).send(parsedCode);
1✔
60
  } catch (error) {
61
    console.error('Error getting script by ID:', error);
×
62
    return res.status(500).json({ error: 'Internal server error' });
×
63
  }
64
};
65

66
export const updateScript = async (req, res, redis) => {
7✔
67
  try {
2✔
68
    const { id } = req.params;
2✔
69
    const { code, metadata } = req.body;
2✔
70

71
    const scriptData = await redis.get(buildKey(id));
2✔
72

73
    if (!scriptData) {
2✔
74
      return res.status(404).json({ error: 'Script not found' });
1✔
75
    }
76

77
    const updatedScript = {
1✔
78
      ...JSON.parse(scriptData),
79
      code: code || JSON.parse(scriptData).code,
1!
80
      metadata: metadata || JSON.parse(scriptData).metadata,
1!
81
      updatedAt: new Date().toISOString(),
82
    };
83

84
    await redis.set(buildKey(id), JSON.stringify(updatedScript));
1✔
85
    return res.status(200).json({ message: 'Script updated successfully' });
1✔
86
  } catch (error) {
87
    console.error('Error updating script:', error);
×
88
    return res.status(500).json({ error: 'Internal server error' });
×
89
  }
90
};
91

92
export const deleteScript = async (req, res, redis) => {
7✔
93
  try {
2✔
94
    const { id } = req.params;
2✔
95

96
    const scriptData = await redis.get(buildKey(id));
2✔
97

98
    if (!scriptData) {
2✔
99
      return res.status(404).json({ error: 'Script not found' });
1✔
100
    }
101

102
    await redis.del(buildKey(id));
1✔
103
    return res.status(200).json({ message: 'Script deleted successfully' });
1✔
104
  } catch (error) {
105
    console.error('Error deleting script:', error);
×
106
    return res.status(500).json({ error: 'Internal server error' });
×
107
  }
108
};
109

110

111
export const deleteAllScripts = async (res, redis) => {
7✔
112
  try {
2✔
113
    const keys = await redis.keys(`${SCRIPT_KEY_PREFIX}*`);
2✔
114

115
    for (const key of keys) {
2✔
116
      await redis.del(key);
3✔
117
    }
118

119
    return res.status(200).json({ message: 'All scripts deleted successfully' });
2✔
120
  } catch (error) {
121
    console.error('Error deleting all scripts:', error);
×
122
    return res.status(500).json({ error: 'Internal server error' });
×
123
  }
124
}
125

126

127
export const parseScript = async (req, res) => {
7✔
128
  try {
2✔
129
    const code = req.body;
2✔
130
    if (!code.includes('module.exports.main')) {
2✔
131
      return res.status(400).json({ error: 'The code must include a module.exports.main function.' });
1✔
132
    }
133
    let parsedCode = code.replace(/\n/g, '\n').replace(/ {4}/g, '\t');
1✔
134
    parsedCode = JSON.stringify(parsedCode);
1✔
135
    return res.status(200).send(parsedCode);
1✔
136
  } catch (error) {
137
    console.error('Error parsing script:', error);
×
138
    return res.status(500).json({ error: 'Internal server error' });
×
139
  }
140
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc