Permalink
Browse files

Zurückblätternfunktion implementiert

  • Loading branch information...
1 parent 50e70cc commit 83979783c59c98fafb357cc13283ce33dba6a1da @KyleRogers committed Oct 19, 2013
@@ -41,6 +41,12 @@ case class Fotoalbum(
fotoMitPosition(nextPos).map( _=> nextPos)
}
+ def vorhergehendePosition(foto: Foto): Option[Long] = {
+ val prevPos = positionVon(foto) - 1
+ fotoMitPosition(prevPos).map( _=> prevPos)
+ }
+
+
private def positionVon(foto: Foto): Long = {
DB.withConnection { implicit connection =>
SQL(
@@ -10,8 +10,12 @@
@main(heading=heading.toString) {
<div id="foto-blaetterer">
<p>
- <a id="vorhergehendesBild" href="#prev">&lt;&lt;&lt; Zur&uuml;ck</a>&nbsp;|&nbsp;
-
+ @album.vorhergehendePosition(foto).map { pos =>
+ <a id="vorhergehendesBild" href="@routes.FotoVorfuehrer.fotoalbum(album.besitzer.name, pos)">Zur&uuml;ck &gt;&gt;&gt;</a>
+ }.getOrElse {
+ Zur&uuml;ck &gt;&gt;&gt;
+ }
+ &nbsp;|&nbsp;
@album.naechstePosition(foto).map { pos =>
<a id="naechstesBild" href="@routes.FotoVorfuehrer.fotoalbum(album.besitzer.name, pos)">Weiter &gt;&gt;&gt;</a>
}.getOrElse {
@@ -12,35 +12,48 @@ class FotoalbumTest extends Specification {
val einGast = KERSTIN
+ val erstesFoto: Foto = Foto(Id(1), PNG_IMAGE_CONTENT)
+ val zweitesFoto: Foto = Foto(Id(2), JPEG_IMAGE_CONTENT)
+ val drittesFoto: Foto = Foto(Id(3), PNG_IMAGE_CONTENT)
+
"Fotoalbum eines Gastes" should {
+
"das erste Foto zurück geben" in DatenbankMit("einemGastMitEinemFoto") {
- einGast.fotoalbum.get.erstesFoto must beEqualTo(Foto(Id(1), PNG_IMAGE_CONTENT))
- einGast.fotoalbum.get.fotoMitPosition(1) must beSome(Foto(Id(1), PNG_IMAGE_CONTENT))
+ einGast.fotoalbum.get.erstesFoto must beEqualTo(erstesFoto)
+ einGast.fotoalbum.get.fotoMitPosition(1) must beSome(erstesFoto)
}
"das Foto mit der kleinsten ID als Foto mit Nummer 1 zurück geben, selbst wenn drei Fotos hochgeladen wurden" in DatenbankMit("einemGastMitDreiFotos") {
- einGast.fotoalbum.get.erstesFoto must beEqualTo(Foto(Id(1), PNG_IMAGE_CONTENT))
- einGast.fotoalbum.get.fotoMitPosition(1) must beSome(Foto(Id(1), PNG_IMAGE_CONTENT))
+ einGast.fotoalbum.get.erstesFoto must beEqualTo(erstesFoto)
+ einGast.fotoalbum.get.fotoMitPosition(1) must beSome(erstesFoto)
}
"das zweite Foto als Foto mit Fotonummer 2 zurück geben" in DatenbankMit("einemGastMitDreiFotos") {
- einGast.fotoalbum.get.fotoMitPosition(2) must beSome(Foto(Id(2), JPEG_IMAGE_CONTENT))
+ einGast.fotoalbum.get.fotoMitPosition(2) must beSome(zweitesFoto)
}
"kein Foto mit negativer Fotonummer finden" in DatenbankMit("einemGastMitDreiFotos") {
einGast.fotoalbum.get.fotoMitPosition(-1) must beNone
}
"kein nächstes Foto für ein einziges Foto haben" in DatenbankMit("einemGastMitEinemFoto") {
- einGast.fotoalbum.get.naechstePosition(Foto(Id(1), PNG_IMAGE_CONTENT)) must beNone
+ einGast.fotoalbum.get.naechstePosition(erstesFoto) must beNone
+ }
+
+ "kein nächstes Foto für das letzte Foto haben" in DatenbankMit("einemGastMitDreiFotos") {
+ einGast.fotoalbum.get.naechstePosition(drittesFoto) must beNone
}
"das zweite Foto als nächstes Foto für das erste Foto haben" in DatenbankMit("einemGastMitDreiFotos") {
- einGast.fotoalbum.get.naechstePosition(Foto(Id(1), PNG_IMAGE_CONTENT)) must beSome(2)
+ einGast.fotoalbum.get.naechstePosition(erstesFoto) must beSome(2)
}
- "kein nächstes Foto für das letzte Foto haben" in DatenbankMit("einemGastMitDreiFotos") {
- einGast.fotoalbum.get.naechstePosition(Foto(Id(3), PNG_IMAGE_CONTENT)) must beNone
+ "kein vorhergehendes Foto für das erste Foto haben" in DatenbankMit("einemGastMitEinemFoto") {
+ einGast.fotoalbum.get.vorhergehendePosition(erstesFoto) must beNone
+ }
+
+ "das erste Foto als vorhergehendes Foto für das zweite Foto haben" in DatenbankMit("einemGastMitDreiFotos") {
+ einGast.fotoalbum.get.vorhergehendePosition(zweitesFoto) must beSome(1)
}
}
@@ -7,6 +7,6 @@
* @author Stefan Penndorf <stefan@cyphoria.net>
*/
@RunWith(Cucumber.class)
-@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, monochrome = true, tags = "@finished")
+@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, monochrome = true, tags = {"@finished", "~@current"})
public class FinishedAppSpecification {
}
@@ -39,15 +39,19 @@ class FotoalbumSchritte extends Schritte with ScalaDsl with DE with Browser {
fotoalben upload bild
}
- Wenn("""^sie zum zweiten Bild blättert$"""){ () =>
- fotoalben.naechstesBild
+ Wenn("""^sie ein Bild weiter blättert$"""){ () =>
+ fotoalben naechstesBild()
+ }
+
+ Wenn("""^sie ein Bild zurück blättert$"""){ () =>
+ fotoalben vorhergehendesBild()
}
Dann("""^wird ein Fotoalbum für sie erstellt$"""){ () =>
fotoalben oeffneAlbumVon "Kerstin"
}
- Dann("""^kann sie das Foto anschauen$"""){ () =>
+ Dann("""^kann sie das erste Foto anschauen$"""){ () =>
fotoalben zeigtBild bild
}
@@ -66,10 +66,15 @@ class FotoalbenSeite extends FluentPage with ShouldMatchers with ImageCompareMat
ImageIO.read(target)
}
- def naechstesBild = {
+ def naechstesBild() = {
$("#naechstesBild").first.click
}
+ def vorhergehendesBild() = {
+ $("#vorhergehendesBild").first.click
+ }
+
+
override def getUrl: String = "/fotoalben"
override def isAt() {
@@ -1,21 +1,27 @@
#language:de
+@finished
Funktionalität: Fotoalbum
Die Gäste können Fotoalben anschauen und selbst Bilder in ein Fotoalbum hochladen.
Grundlage:
Angenommen Kerstin wurde freigeschaltet
Und Kerstin hat sich angemeldet
- @finished
Szenario: Fotos hochladen
Angenommen Kerstin ruft die Fotoalben auf
Wenn sie ein Bild hochlädt
Dann wird ein Fotoalbum für sie erstellt
- Und kann sie das Foto anschauen
+ Und kann sie das erste Foto anschauen
- @current
- Szenario: Blättern im Fotoalbum
+ Szenario: Vorblättern im Fotoalbum
Angenommen Kerstin hat drei Bilder hochgeladen
Und Kerstin ruft ihr Fotoalbum auf
- Wenn sie zum zweiten Bild blättert
+ Wenn sie ein Bild weiter blättert
Dann kann sie das zweite Foto anschauen
+
+ Szenario: Zurückblättern im Fotoalbum
+ Angenommen Kerstin hat drei Bilder hochgeladen
+ Und Kerstin ruft ihr Fotoalbum auf
+ Wenn sie ein Bild weiter blättert
+ Und sie ein Bild zurück blättert
+ Dann kann sie das erste Foto anschauen

0 comments on commit 8397978

Please sign in to comment.