github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/flowgen/converter/export_test.go (about) 1 package converter 2 3 import ( 4 "bytes" 5 "testing" 6 ) 7 8 func getOpenGatewayId(g *Gateway) string { 9 return g.ID() + "_open" 10 } 11 12 func getCloseGatewayId(g *Gateway) string { 13 return g.ID() + "_close" 14 } 15 16 func isExistSequenceFlow(d *Definitions, from string, to string) bool { 17 for _, flow := range d.Process.Flows { 18 if flow.From == from && flow.To == to { 19 return true 20 } 21 } 22 23 return false 24 } 25 26 func assertSequenceFlow(t *testing.T, d *Definitions, from string, to string) { 27 if !isExistSequenceFlow(d, from, to) { 28 t.Errorf("Expected SequenceFlow[FROM:%s,TO:%s] not exists.", from, to) 29 } 30 } 31 32 func TestGenerateDefinitions(t *testing.T) { 33 initIndexes() 34 35 // job1->job2->[job3,job4->job5]->[job6,job7]->job8 36 job1 := NewJob("test1") 37 job2 := NewJob("test2") 38 job3 := NewJob("test3") 39 job4 := NewJob("test4") 40 job5 := NewJob("test5") 41 job6 := NewJob("test6") 42 job7 := NewJob("test7") 43 job8 := NewJob("test8") 44 gw1 := NewGateway() 45 gw2 := NewGateway() 46 job1.SetNext(job2) 47 job2.SetNext(gw1) 48 gw1.AddPathHead(job3) 49 gw1.AddPathHead(job4) 50 job4.SetNext(job5) 51 gw1.SetNext(gw2) 52 gw2.AddPathHead(job6) 53 gw2.AddPathHead(job7) 54 gw2.SetNext(job8) 55 56 d := GenerateDefinitions(job1) 57 assertSequenceFlow(t, d, job1.ID(), job2.ID()) 58 assertSequenceFlow(t, d, job2.ID(), getOpenGatewayId(gw1)) 59 assertSequenceFlow(t, d, getOpenGatewayId(gw1), job3.ID()) 60 assertSequenceFlow(t, d, getOpenGatewayId(gw1), job4.ID()) 61 assertSequenceFlow(t, d, job4.ID(), job5.ID()) 62 assertSequenceFlow(t, d, job3.ID(), getCloseGatewayId(gw1)) 63 assertSequenceFlow(t, d, job5.ID(), getCloseGatewayId(gw1)) 64 assertSequenceFlow(t, d, getCloseGatewayId(gw1), getOpenGatewayId(gw2)) 65 assertSequenceFlow(t, d, getOpenGatewayId(gw2), job6.ID()) 66 assertSequenceFlow(t, d, getOpenGatewayId(gw2), job7.ID()) 67 assertSequenceFlow(t, d, job6.ID(), getCloseGatewayId(gw2)) 68 assertSequenceFlow(t, d, job7.ID(), getCloseGatewayId(gw2)) 69 assertSequenceFlow(t, d, getCloseGatewayId(gw2), job8.ID()) 70 } 71 72 func TestExport(t *testing.T) { 73 expected := `<?xml version="1.0" encoding="UTF-8"?> 74 <definitions> 75 <process> 76 <startEvent id=":start"></startEvent> 77 <endEvent id=":end"></endEvent> 78 <serviceTask id="job1" name="test1"></serviceTask> 79 <serviceTask id="job2" name="test2"></serviceTask> 80 <serviceTask id="job3" name="test3"></serviceTask> 81 <serviceTask id="job4" name="test4"></serviceTask> 82 <parallelGateway id="gw1_open"></parallelGateway> 83 <parallelGateway id="gw1_close"></parallelGateway> 84 <sequenceFlow sourceRef=":start" targetRef="job1"></sequenceFlow> 85 <sequenceFlow sourceRef="job1" targetRef="gw1_open"></sequenceFlow> 86 <sequenceFlow sourceRef="gw1_open" targetRef="job2"></sequenceFlow> 87 <sequenceFlow sourceRef="job2" targetRef="gw1_close"></sequenceFlow> 88 <sequenceFlow sourceRef="gw1_open" targetRef="job3"></sequenceFlow> 89 <sequenceFlow sourceRef="job3" targetRef="gw1_close"></sequenceFlow> 90 <sequenceFlow sourceRef="gw1_close" targetRef="job4"></sequenceFlow> 91 <sequenceFlow sourceRef="job4" targetRef=":end"></sequenceFlow> 92 </process> 93 </definitions>` 94 95 initIndexes() 96 job1 := NewJob("test1") 97 job2 := NewJob("test2") 98 job3 := NewJob("test3") 99 job4 := NewJob("test4") 100 gw1 := NewGateway() 101 job1.SetNext(gw1) 102 gw1.AddPathHead(job2) 103 gw1.AddPathHead(job3) 104 gw1.SetNext(job4) 105 d := GenerateDefinitions(job1) 106 107 buf := new(bytes.Buffer) 108 err := Export(buf, d) 109 if err != nil { 110 t.Fatalf("Unexpected error occured: %s", err) 111 } 112 113 if buf.String() != expected { 114 t.Errorf("Exported BPMN is not expected.") 115 t.Logf("Output:\n%s", expected) 116 } 117 }