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

rwjdk / TrelloDotNet / 13540761377

26 Feb 2025 09:33AM UTC coverage: 41.845% (-3.2%) from 44.997%
13540761377

push

github

rwjdk
More 2.x work

955 of 3217 branches covered (29.69%)

Branch coverage included in aggregate %.

3 of 240 new or added lines in 11 files covered. (1.25%)

5 existing lines in 3 files now uncovered.

2475 of 4980 relevant lines covered (49.7%)

42.46 hits per line

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

46.86
/src/TrelloDotNet/Model/Options/GetCardOptions/GetCardOptions.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4

5
namespace TrelloDotNet.Model.Options.GetCardOptions
6
{
7
    /// <summary>
8
    /// Options on how and what should be included on the cards (Example only a few fields to increase performance or more nested data to avoid more API calls)
9
    /// </summary>
10
    public class GetCardOptions
11
    {
12
        /// <summary>
13
        /// All or a comma-separated list of fields. Defaults: badges, checkItemStates, closed, dateLastActivity, desc, descData, due, start, email, idBoard, idChecklists, idLabels, idList, idMembers, idShort, idAttachmentCover, manualCoverAttachment, labels, name, pos, shortUrl, url
14
        /// </summary>
15
        public CardFields CardFields { get; set; }
236✔
16

17
        /// <summary>
18
        /// Provide one or more Card-action types there (TrelloDotNet.Model.Webhook.WebhookActionTypes) to get them included with the Card
19
        /// </summary>
20
        public ActionTypesToInclude ActionsTypes { get; set; }
120✔
21

22
        /// <summary>
23
        /// Controls if cards should include their attachments (Default: False)
24
        /// </summary>
25
        public GetCardOptionsIncludeAttachments IncludeAttachments { get; set; } = GetCardOptionsIncludeAttachments.False;
360✔
26

27
        /// <summary>
28
        /// What attachments-fields to include if IncludeAttachments are set to 'True' or 'Cover'
29
        /// </summary>
30
        public AttachmentFields AttachmentFields { get; set; }
120✔
31

32
        /// <summary>
33
        /// Whether to return member objects for members on the card (Default: False)
34
        /// </summary>
35
        public bool IncludeMembers { get; set; }
120✔
36

37
        /// <summary>
38
        /// Whether to return checklist objects for members on the card (Default: False)
39
        /// </summary>
40
        public bool IncludeChecklists { get; set; }
179✔
41

42
        /// <summary>
43
        /// What member-fields to include if IncludeMembers are set to True
44
        /// </summary>
45
        public MemberFields MemberFields { get; set; }
120✔
46

47
        /// <summary>
48
        /// What member-fields to include if IncludeMemberVotes are set to True
49
        /// </summary>
50
        public MemberFields MembersVotedFields { get; set; }
120✔
51

52
        /// <summary>
53
        /// What checklist-fields to include if IncludeChecklists are set to True
54
        /// </summary>
55
        public ChecklistFields ChecklistFields { get; set; }
120✔
56

57
        /// <summary>
58
        /// What stickers-fields to include if IncludeStickers are set to True
59
        /// </summary>
60
        public StickerFields StickerFields { get; set; }
120✔
61

62
        /// <summary>
63
        /// Whether to return Board object the card is on (Default: False)
64
        /// </summary>
65
        public bool IncludeBoard { get; set; }
122✔
66

67
        /// <summary>
68
        /// Whether to return List object the card is in (Default: False)
69
        /// </summary>
70
        public bool IncludeList { get; set; }
122✔
71

72
        /// <summary>
73
        /// Whether to return Plugin object of the card (Default: False)
74
        /// </summary>
75
        public bool IncludePluginData { get; set; }
120✔
76

77
        /// <summary>
78
        /// Whether to return Sticker objects of the card (Default: False)
79
        /// </summary>
80
        public bool IncludeStickers { get; set; }
120✔
81

82
        /// <summary>
83
        /// Whether to return MemberVotes objects of the card (Default: False)
84
        /// </summary>
85
        public bool IncludeMemberVotes { get; set; }
120✔
86

87
        /// <summary>
88
        /// Whether to return CustomFieldsItem objects of the card (Default: False)
89
        /// </summary>
90
        public bool IncludeCustomFieldItems { get; set; }
179✔
91

92
        /// <summary>
93
        /// What board-fields to include if IncludeBoard are set to True
94
        /// </summary>
95
        public BoardFields BoardFields { get; set; }
120✔
96

97
        /// <summary>
98
        /// Limit how many object are returned (Default All) [Only used by methods where multiple objects are returned
99
        /// </summary>
100
        public int? Limit { get; set; }
1✔
101

102
        /// <summary>
103
        /// Pagination (Only return cards before this Card Id was created)
104
        /// </summary>
105
        public string Before { get; set; } = null;
1✔
106

107
        /// <summary>
108
        /// Pagination (Only return cards since this Card Id was created)
109
        /// </summary>
110
        public string Since { get; set; } = null;
1✔
111

112
        /// <summary>
113
        /// What Kind of Cards should be included (Active, Closed/Archived or All) [Only used on GetCardsForBoard(...)]
114
        /// </summary>
115
        public CardsFilter? Filter { get; set; }
3✔
116

117
        /// <summary>
118
        /// Order the cards returned by this (only used when multiple cards are returned)
119
        /// </summary>
120
        public CardsOrderBy? OrderBy { get; set; }
2✔
121

122
        /// <summary>
123
        /// Add conditions of which of the data from the call is actually returned (Note: this is in-memory filtering as Trello's API is not able to filter on server-side)
124
        /// </summary>
125
        public List<CardsFilterCondition> FilterConditions { get; set; } = new List<CardsFilterCondition>();
123✔
126

127
        /// <summary>
128
        /// Send these Additional Parameters not supported out-of-the-box (should you need to do something to the query-parameters not yet supported by this API)
129
        /// </summary>
130
        public List<QueryParameter> AdditionalParameters { get; set; } = new List<QueryParameter>();
240✔
131

132
        internal QueryParameter[] GetParameters(bool multipleObjects)
133
        {
134
            List<QueryParameter> parameters = new List<QueryParameter>();
120✔
135
            if (CardFields != null)
120✔
136
            {
137
                parameters.Add(new QueryParameter("fields", string.Join(",", CardFields.Fields)));
58✔
138
            }
139

140
            if (ActionsTypes != null)
120!
141
            {
142
                parameters.Add(new QueryParameter("actions", string.Join(",", ActionsTypes.ActionTypes)));
×
143
            }
144

145
            if (AttachmentFields != null)
120!
146
            {
147
                parameters.Add(new QueryParameter("attachment_fields", string.Join(",", AttachmentFields.Fields)));
×
148
            }
149

150
            if (MemberFields != null)
120!
151
            {
152
                parameters.Add(new QueryParameter("member_fields", string.Join(",", MemberFields.Fields)));
×
153
            }
154

155
            if (BoardFields != null)
120!
156
            {
157
                parameters.Add(new QueryParameter("board_fields", string.Join(",", BoardFields.Fields)));
×
158
            }
159

160
            if (ChecklistFields != null)
120!
161
            {
162
                parameters.Add(new QueryParameter("checklist_fields", string.Join(",", ChecklistFields.Fields)));
×
163
            }
164

165
            if (StickerFields != null)
120!
166
            {
167
                parameters.Add(new QueryParameter("sticker_fields", string.Join(",", StickerFields.Fields)));
×
168
            }
169

170
            if (MembersVotedFields != null)
120!
171
            {
172
                parameters.Add(new QueryParameter("memberVoted_fields", string.Join(",", MembersVotedFields.Fields)));
×
173
            }
174

175
            parameters.Add(new QueryParameter("members", IncludeMembers));
120✔
176
            parameters.Add(new QueryParameter("board", IncludeBoard));
120✔
177
            parameters.Add(new QueryParameter("list", IncludeList));
120✔
178
            parameters.Add(new QueryParameter("checklists", IncludeChecklists ? "all" : "none"));
120✔
179
            parameters.Add(new QueryParameter("pluginData", IncludePluginData));
120✔
180
            parameters.Add(new QueryParameter("stickers", IncludeStickers));
120✔
181
            parameters.Add(new QueryParameter("customFieldItems", IncludeCustomFieldItems));
120✔
182
            parameters.Add(new QueryParameter("membersVoted", IncludeMemberVotes));
120✔
183

184
            switch (IncludeAttachments)
120!
185
            {
186
                case GetCardOptionsIncludeAttachments.True:
187
                    parameters.Add(new QueryParameter("attachments", true));
61✔
188
                    break;
61✔
189
                case GetCardOptionsIncludeAttachments.False:
190
                    parameters.Add(new QueryParameter("attachments", false));
59✔
191
                    break;
59✔
192
                case GetCardOptionsIncludeAttachments.Cover:
193
                    parameters.Add(new QueryParameter("attachments", "cover"));
×
194
                    break;
×
195
                default:
196
                    throw new ArgumentOutOfRangeException();
×
197
            }
198

199
            if (multipleObjects)
120✔
200
            {
201
                if (Limit.HasValue)
1!
202
                {
203
                    parameters.Add(new QueryParameter("limit", Limit.Value));
×
204
                }
205

206
                if (Before != null)
1!
207
                {
208
                    parameters.Add(new QueryParameter("before", Before));
×
209
                }
210

211
                if (Since != null)
1!
212
                {
213
                    parameters.Add(new QueryParameter("since", Since));
×
214
                }
215
            }
216

217
            parameters.AddRange(AdditionalParameters);
120✔
218

219
            return parameters.ToArray();
120✔
220
        }
221

222
        internal void AdjustFieldsBasedOnSelectedOptions()
223
        {
224
            List<CardFieldsType> cardFieldsNeededForFilterAndOrder = new List<CardFieldsType>();
1✔
225
            switch (OrderBy)
1!
226
            {
227
                case CardsOrderBy.StartDateAsc:
228
                case CardsOrderBy.StartDateDesc:
229
                    cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Start);
×
230
                    break;
×
231
                case CardsOrderBy.DueDateAsc:
232
                case CardsOrderBy.DueDateDesc:
233
                    cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Due);
×
234
                    break;
×
235
                case CardsOrderBy.NameAsc:
236
                case CardsOrderBy.NameDesc:
237
                    cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Name);
×
238
                    break;
239
            }
240

241
            if (FilterConditions != null && FilterConditions.Count != 0)
1!
242
            {
243
                foreach (CardsFilterCondition condition in FilterConditions)
×
244
                {
245
                    switch (condition.Field)
×
246
                    {
247
                        case CardsConditionField.Name:
248
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Name);
×
249
                            break;
×
250
                        case CardsConditionField.ListId:
251
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.ListId);
×
252
                            break;
×
253
                        case CardsConditionField.ListName:
NEW
254
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.ListId);
×
NEW
255
                            IncludeList = true;
×
NEW
256
                            break;
×
257
                        case CardsConditionField.LabelId:
258
                        case CardsConditionField.LabelName:
259
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.LabelIds);
×
260
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Labels);
×
261
                            break;
×
262
                        case CardsConditionField.MemberId:
NEW
263
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.MemberIds);
×
NEW
264
                            break;
×
265
                        case CardsConditionField.MemberName:
266
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.MemberIds);
×
NEW
267
                            IncludeMembers = true;
×
UNCOV
268
                            break;
×
269
                        case CardsConditionField.Description:
270
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Description);
×
271
                            break;
×
272
                        case CardsConditionField.Due:
273
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Due);
×
274
                            break;
×
275
                        case CardsConditionField.DueWithNoDueComplete:
276
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Due);
×
277
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.DueComplete);
×
278
                            break;
×
279
                        case CardsConditionField.Start:
280
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.Start);
×
281
                            break;
×
282
                        case CardsConditionField.CustomField:
283
                            IncludeCustomFieldItems = true;
×
284
                            break;
×
285
                        case CardsConditionField.DueComplete:
286
                            cardFieldsNeededForFilterAndOrder.Add(CardFieldsType.DueComplete);
×
287
                            break;
288
                    }
289
                }
290
            }
291

292
            // ReSharper disable once InvertIf
293
            if (cardFieldsNeededForFilterAndOrder.Count > 0)
1!
294
            {
295
                if (CardFields == null)
×
296
                {
297
                    CardFields = CardFields.DefaultFields;
×
298
                }
299

300
                foreach (CardFieldsType cardFieldsType in cardFieldsNeededForFilterAndOrder.Distinct())
×
301
                {
302
                    CardFields.AddIfMissing(cardFieldsType);
×
303
                }
304
            }
305
        }
1✔
306
    }
307
}
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