chiark / gitweb /
wip links, new test fails
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 4 Jan 2021 00:00:43 +0000 (00:00 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 4 Jan 2021 00:00:43 +0000 (00:00 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
specs/test.table.toml
wdriver.rs
wdriver/wdt-altergame.rs [new file with mode: 0644]

index 3e1f0122df207da957a79a56fa021d76d72bac32..8e69939d5bf10d79f67daf7f8a3102e3d9e13873 100644 (file)
@@ -6,6 +6,9 @@ timezone = "Europe/London"
 
 #players = [ { account_glob = "server:*" } ]
 
+[links]
+Voice = "https://jitsi.example.com/initial"
+
 [[players]]
 account_glob = "server:*"
 
index a9b9746033e54ff395600811d5a9741442e77d5b..30b6ef9075add2ef8f084e080c432039433c8881 100644 (file)
@@ -5,7 +5,7 @@
 #![feature(unboxed_closures)]
 #![feature(fn_traits)]
 
-pub use anyhow::{anyhow, Context};
+pub use anyhow::{anyhow, ensure, Context};
 pub use boolinator::Boolinator;
 pub use fehler::{throw, throws};
 pub use if_chain::if_chain;
diff --git a/wdriver/wdt-altergame.rs b/wdriver/wdt-altergame.rs
new file mode 100644 (file)
index 0000000..a2c3b47
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2020 Ian Jackson
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// There is NO WARRANTY.
+
+use otter_webdriver_tests::*;
+
+use otter::spec::LinkKind;
+
+struct Context {
+  su: Setup,
+  alice: Window,
+}
+
+impl Context {
+  #[throws(AE)]
+  fn check_link(&mut self, desc: &str, url: Option<&str>) {
+    let mut w = self.su.w(&self.alice)?;
+    w.synch()?;
+    let container = w.find_element(By::Id("links"))?;
+    let relevant = container
+      .find_elements(By::Tag("a"))?;
+    let relevant : Vec<_> = relevant
+      .iter()
+      .map(|e| Ok::<_,AE>((e, e.text()?)))
+      .collect::<Result<Vec<_>,AE>>()?;
+    let relevant : Vec<_> = relevant
+      .iter()
+      .filter(|(_e, txt)| txt == desc)
+      .collect();
+    ensure!(relevant.len() == url.iter().len());
+    if let Some(url) = url {
+      ensure!(relevant[0].0.get_attribute("href")?
+              .as_ref().map(|s| s.as_str()) == Some(url));
+    }
+  }
+
+  #[throws(AE)]
+  fn test_link(&mut self, kind: LinkKind, desc: &str, url: &str) {
+    self.su.ds.otter(&["set-link", &kind.to_string(), url])?;
+    self.check_link(desc, Some(url))?;
+  }
+}
+
+#[throws(AE)]
+fn main(){
+  let (mut su, inst) = setup(module_path!()).always_context("setup")?;
+  let [alice, _] : [Window; 2] =
+    su.setup_static_users(&inst)?.try_into().unwrap();
+  debug!("ok {:?}", alice);
+
+  let mut c = Context { su, alice };
+
+  c.check_link("Info", None)?;
+  c.check_link("Voice", Some("https://jitsi.example.com/initial"))?;
+  c.test_link(LinkKind::Info, "Info", "https://www.example.org/newinfo")?;
+
+  info!("ok");
+}