This repository has been archived by the owner on Apr 12, 2018. It is now read-only.
forked from aboisvert/liftweb
/
QueryExamples.scala
100 lines (88 loc) · 3.51 KB
/
QueryExamples.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
* Copyright 2009-2010 WorldWide Conferencing, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.liftweb
package json
import org.specs.Specification
import org.specs.runner.{Runner, JUnit}
class QueryExamplesTest extends Runner(QueryExamples) with JUnit
object QueryExamples extends Specification {
"List of IPs" in {
val ips = for { JString(ip) <- json \\ "ip" } yield ip
ips mustEqual List("192.168.1.125", "192.168.1.126", "192.168.1.127", "192.168.2.125", "192.168.2.126")
}
"List of IPs converted to XML" in {
val ips = <ips>{ for { JString(ip) <- json \\ "ip" } yield <ip>{ ip }</ip> }</ips>
ips mustEqual <ips><ip>192.168.1.125</ip><ip>192.168.1.126</ip><ip>192.168.1.127</ip><ip>192.168.2.125</ip><ip>192.168.2.126</ip></ips>
}
"List of IPs in cluster2" in {
val ips = for {
cluster @ JObject(x) <- json \ "data_center"
if (x contains JField("name", JString("cluster2")))
JString(ip) <- cluster \\ "ip" } yield ip
ips mustEqual List("192.168.2.125", "192.168.2.126")
}
"Total cpus in data center" in {
(for { JInt(x) <- json \\ "cpus" } yield x) reduceLeft (_ + _) mustEqual 40
}
"Servers sorted by uptime" in {
case class Server(ip: String, uptime: Long)
val servers = for {
JArray(servers) <- json \\ "servers"
JObject(server) <- servers
JField("ip", JString(ip)) <- server
JField("uptime", JInt(uptime)) <- server
} yield Server(ip, uptime.longValue)
servers sortWith (_.uptime > _.uptime) mustEqual List(Server("192.168.1.127", 901214), Server("192.168.2.125", 453423), Server("192.168.2.126", 214312), Server("192.168.1.126", 189822), Server("192.168.1.125", 150123))
}
"Clusters administered by liza" in {
val clusters = for {
JObject(cluster) <- json
JField("admins", JArray(admins)) <- cluster
if admins contains JString("liza")
JField("name", JString(name)) <- cluster
} yield name
clusters mustEqual List("cluster2")
}
val json = parse("""
{ "data_center": [
{
"name": "cluster1",
"servers": [
{"ip": "192.168.1.125", "uptime": 150123, "specs": {"cpus": 8, "ram": 2048}},
{"ip": "192.168.1.126", "uptime": 189822, "specs": {"cpus": 16, "ram": 4096}},
{"ip": "192.168.1.127", "uptime": 901214, "specs": {"cpus": 8, "ram": 4096}}
],
"links": [
{"href": "http://www.example.com/admin", "name": "admin"},
{"href": "http://www,example.com/home", "name": "home"}
],
"admins": ["jim12", "joe", "maddog"]
},
{
"name": "cluster2",
"servers": [
{"ip": "192.168.2.125", "uptime": 453423, "specs": {"cpus": 4, "ram": 2048}},
{"ip": "192.168.2.126", "uptime": 214312, "specs": {"cpus": 4, "ram": 2048}},
],
"links": [
{"href": "http://www.example2.com/admin", "name": "admin"},
{"href": "http://www,example2.com/home", "name": "home"}
],
"admins": ["joe", "liza"]
}
]}
""")
}