Skip to content

Commit 85832af

Browse files
committed
test(nextcloud): split webdav tests
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
1 parent ae70c87 commit 85832af

File tree

10 files changed

+327
-305
lines changed

10 files changed

+327
-305
lines changed

packages/nextcloud/lib/src/api/webdav/models/props.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// coverage:ignore-file
33
import 'package:meta/meta.dart';
44
import 'package:nextcloud/src/api/webdav/webdav.dart';
5-
import 'package:nextcloud/src/utils/date_time.dart';
65
import 'package:timezone/timezone.dart' as tz;
76
import 'package:xml/xml.dart';
87
import 'package:xml_annotation/xml_annotation.dart' as annotation;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export 'options_parser.dart';
22
export 'webdav_response_converter.dart';
33
export 'webdav_uri.dart';
4+
export 'xml_date_time_converter.dart';
45
export 'xml_duration_converter.dart';

packages/nextcloud/lib/src/api/webdav/utils/webdav_response_converter.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,11 @@ final class WebDavResponseConverter with Converter<http.Response, WebDavMultista
1313
/// Creates a new response converter
1414
const WebDavResponseConverter();
1515

16+
static final _converter = XmlEventDecoder().fuse(const XmlNormalizeEvents()).fuse(const XmlNodeDecoder());
17+
1618
@override
1719
WebDavMultistatus convert(http.Response input) {
18-
final xml = XmlEventDecoder()
19-
.fuse(const XmlNormalizeEvents())
20-
.fuse(const XmlNodeDecoder())
21-
.convert(input.body)
22-
.firstWhere((element) => element is XmlElement) as XmlElement;
20+
final xml = _converter.convert(input.body).firstWhere((element) => element is XmlElement) as XmlElement;
2321

2422
return WebDavMultistatus.fromXmlElement(xml);
2523
}
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
import 'package:meta/meta.dart';
2+
import 'package:nextcloud/utils.dart';
3+
import 'package:timezone/timezone.dart' as tz;
4+
import 'package:xml/xml.dart' as xml;
5+
import 'package:xml_annotation/xml_annotation.dart' as xml_annotation;
6+
7+
@internal
8+
final class HttpDateXMLConverter implements xml_annotation.XmlConverter<tz.TZDateTime?> {
9+
const HttpDateXMLConverter();
10+
11+
@override
12+
void buildXmlChildren(
13+
tz.TZDateTime? instance,
14+
xml.XmlBuilder builder, {
15+
Map<String, String> namespaces = const {},
16+
}) {
17+
if (instance == null) {
18+
return;
19+
}
20+
21+
final date = formatHttpDate(instance);
22+
builder.text(date);
23+
}
24+
25+
@override
26+
tz.TZDateTime? fromXmlElement(
27+
xml.XmlElement element,
28+
) {
29+
final date = element.getText();
30+
if (date != null) {
31+
return parseHttpDate(date);
32+
}
33+
34+
return null;
35+
}
36+
37+
@override
38+
List<xml.XmlAttribute> toXmlAttributes(
39+
tz.TZDateTime? instance, {
40+
Map<String, String?> namespaces = const {},
41+
}) {
42+
return const <xml.XmlAttribute>[];
43+
}
44+
45+
@override
46+
List<xml.XmlNode> toXmlChildren(
47+
tz.TZDateTime? instance, {
48+
Map<String, String?> namespaces = const {},
49+
}) {
50+
if (instance == null) {
51+
return const <xml.XmlNode>[];
52+
}
53+
54+
final date = formatHttpDate(instance);
55+
return <xml.XmlNode>[
56+
xml.XmlText(date),
57+
];
58+
}
59+
}
60+
61+
@internal
62+
final class ISO8601XMLConverter implements xml_annotation.XmlConverter<tz.TZDateTime?> {
63+
const ISO8601XMLConverter();
64+
65+
@override
66+
void buildXmlChildren(
67+
tz.TZDateTime? instance,
68+
xml.XmlBuilder builder, {
69+
Map<String, String> namespaces = const {},
70+
}) {
71+
if (instance == null) {
72+
return;
73+
}
74+
75+
final date = instance.toIso8601String();
76+
builder.text(date);
77+
}
78+
79+
@override
80+
tz.TZDateTime? fromXmlElement(
81+
xml.XmlElement element,
82+
) {
83+
final date = element.getText();
84+
if (date != null) {
85+
return tz.TZDateTime.parse(tz.UTC, date);
86+
}
87+
88+
return null;
89+
}
90+
91+
@override
92+
List<xml.XmlAttribute> toXmlAttributes(
93+
tz.TZDateTime? instance, {
94+
Map<String, String?> namespaces = const {},
95+
}) {
96+
return const <xml.XmlAttribute>[];
97+
}
98+
99+
@override
100+
List<xml.XmlNode> toXmlChildren(
101+
tz.TZDateTime? instance, {
102+
Map<String, String?> namespaces = const {},
103+
}) {
104+
if (instance == null) {
105+
return const <xml.XmlNode>[];
106+
}
107+
108+
final date = instance.toIso8601String();
109+
return <xml.XmlNode>[
110+
xml.XmlText(date),
111+
];
112+
}
113+
}
114+
115+
@internal
116+
final class UnixEpochXMLConverter implements xml_annotation.XmlConverter<tz.TZDateTime?> {
117+
const UnixEpochXMLConverter();
118+
119+
@override
120+
void buildXmlChildren(
121+
tz.TZDateTime? instance,
122+
xml.XmlBuilder builder, {
123+
Map<String, String> namespaces = const {},
124+
}) {
125+
if (instance == null) {
126+
return;
127+
}
128+
129+
final date = instance.secondsSinceEpoch.toString();
130+
builder.text(date);
131+
}
132+
133+
@override
134+
tz.TZDateTime? fromXmlElement(
135+
xml.XmlElement element,
136+
) {
137+
final date = element.getText();
138+
if (date != null) {
139+
return DateTimeUtils.fromSecondsSinceEpoch(
140+
tz.UTC,
141+
int.parse(date),
142+
);
143+
}
144+
145+
return null;
146+
}
147+
148+
@override
149+
List<xml.XmlAttribute> toXmlAttributes(
150+
tz.TZDateTime? instance, {
151+
Map<String, String?> namespaces = const {},
152+
}) {
153+
return const <xml.XmlAttribute>[];
154+
}
155+
156+
@override
157+
List<xml.XmlNode> toXmlChildren(
158+
tz.TZDateTime? instance, {
159+
Map<String, String?> namespaces = const {},
160+
}) {
161+
if (instance == null) {
162+
return const <xml.XmlNode>[];
163+
}
164+
165+
final date = instance.secondsSinceEpoch.toString();
166+
return <xml.XmlNode>[
167+
xml.XmlText(date),
168+
];
169+
}
170+
}
Lines changed: 0 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import 'package:meta/meta.dart';
2-
import 'package:nextcloud/src/utils/http_date_parser.dart';
3-
import 'package:nextcloud/utils.dart';
41
import 'package:timezone/timezone.dart' as tz;
5-
import 'package:xml/xml.dart' as xml;
6-
import 'package:xml_annotation/xml_annotation.dart' as xml_annotation;
72

83
/// Common methods to work with [DateTime] data.
94
extension DateTimeUtils on DateTime {
@@ -33,168 +28,3 @@ extension DateTimeUtils on DateTime {
3328
/// In other words: `secondsSinceEpoch.abs() <= 8640000000000`.
3429
int get secondsSinceEpoch => millisecondsSinceEpoch ~/ Duration.millisecondsPerSecond;
3530
}
36-
37-
@internal
38-
final class HttpDateXMLConverter implements xml_annotation.XmlConverter<tz.TZDateTime?> {
39-
const HttpDateXMLConverter();
40-
41-
@override
42-
void buildXmlChildren(
43-
tz.TZDateTime? instance,
44-
xml.XmlBuilder builder, {
45-
Map<String, String> namespaces = const {},
46-
}) {
47-
if (instance == null) {
48-
return;
49-
}
50-
51-
final date = formatHttpDate(instance);
52-
builder.text(date);
53-
}
54-
55-
@override
56-
tz.TZDateTime? fromXmlElement(
57-
xml.XmlElement element,
58-
) {
59-
final date = element.getText();
60-
if (date != null) {
61-
return parseHttpDate(date);
62-
}
63-
64-
return null;
65-
}
66-
67-
@override
68-
List<xml.XmlAttribute> toXmlAttributes(
69-
tz.TZDateTime? instance, {
70-
Map<String, String?> namespaces = const {},
71-
}) {
72-
return const <xml.XmlAttribute>[];
73-
}
74-
75-
@override
76-
List<xml.XmlNode> toXmlChildren(
77-
tz.TZDateTime? instance, {
78-
Map<String, String?> namespaces = const {},
79-
}) {
80-
if (instance == null) {
81-
return const <xml.XmlNode>[];
82-
}
83-
84-
final date = formatHttpDate(instance);
85-
return <xml.XmlNode>[
86-
xml.XmlText(date),
87-
];
88-
}
89-
}
90-
91-
@internal
92-
final class ISO8601XMLConverter implements xml_annotation.XmlConverter<tz.TZDateTime?> {
93-
const ISO8601XMLConverter();
94-
95-
@override
96-
void buildXmlChildren(
97-
tz.TZDateTime? instance,
98-
xml.XmlBuilder builder, {
99-
Map<String, String> namespaces = const {},
100-
}) {
101-
if (instance == null) {
102-
return;
103-
}
104-
105-
final date = instance.toIso8601String();
106-
builder.text(date);
107-
}
108-
109-
@override
110-
tz.TZDateTime? fromXmlElement(
111-
xml.XmlElement element,
112-
) {
113-
final date = element.getText();
114-
if (date != null) {
115-
return tz.TZDateTime.parse(tz.UTC, date);
116-
}
117-
118-
return null;
119-
}
120-
121-
@override
122-
List<xml.XmlAttribute> toXmlAttributes(
123-
tz.TZDateTime? instance, {
124-
Map<String, String?> namespaces = const {},
125-
}) {
126-
return const <xml.XmlAttribute>[];
127-
}
128-
129-
@override
130-
List<xml.XmlNode> toXmlChildren(
131-
tz.TZDateTime? instance, {
132-
Map<String, String?> namespaces = const {},
133-
}) {
134-
if (instance == null) {
135-
return const <xml.XmlNode>[];
136-
}
137-
138-
final date = instance.toIso8601String();
139-
return <xml.XmlNode>[
140-
xml.XmlText(date),
141-
];
142-
}
143-
}
144-
145-
@internal
146-
final class UnixEpochXMLConverter implements xml_annotation.XmlConverter<tz.TZDateTime?> {
147-
const UnixEpochXMLConverter();
148-
149-
@override
150-
void buildXmlChildren(
151-
tz.TZDateTime? instance,
152-
xml.XmlBuilder builder, {
153-
Map<String, String> namespaces = const {},
154-
}) {
155-
if (instance == null) {
156-
return;
157-
}
158-
159-
final date = instance.secondsSinceEpoch.toString();
160-
builder.text(date);
161-
}
162-
163-
@override
164-
tz.TZDateTime? fromXmlElement(
165-
xml.XmlElement element,
166-
) {
167-
final date = element.getText();
168-
if (date != null) {
169-
return DateTimeUtils.fromSecondsSinceEpoch(
170-
tz.UTC,
171-
int.parse(date),
172-
);
173-
}
174-
175-
return null;
176-
}
177-
178-
@override
179-
List<xml.XmlAttribute> toXmlAttributes(
180-
tz.TZDateTime? instance, {
181-
Map<String, String?> namespaces = const {},
182-
}) {
183-
return const <xml.XmlAttribute>[];
184-
}
185-
186-
@override
187-
List<xml.XmlNode> toXmlChildren(
188-
tz.TZDateTime? instance, {
189-
Map<String, String?> namespaces = const {},
190-
}) {
191-
if (instance == null) {
192-
return const <xml.XmlNode>[];
193-
}
194-
195-
final date = instance.secondsSinceEpoch.toString();
196-
return <xml.XmlNode>[
197-
xml.XmlText(date),
198-
];
199-
}
200-
}

packages/nextcloud/lib/webdav.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ import 'package:nextcloud/src/api/webdav/webdav_client.dart';
22
import 'package:nextcloud/src/nextcloud_client.dart';
33

44
export 'package:nextcloud/src/api/webdav/webdav.dart'
5-
hide DurationXMLConverter, WebDavCSRFClient, constructUri, parseWebDavOptions;
5+
hide
6+
DurationXMLConverter,
7+
HttpDateXMLConverter,
8+
ISO8601XMLConverter,
9+
UnixEpochXMLConverter,
10+
WebDavCSRFClient,
11+
constructUri,
12+
parseWebDavOptions;
613

714
/// Client for WebDAV.
815
extension WebDAVExtension on NextcloudClient {

0 commit comments

Comments
 (0)