public void TestMessageTypesRoundTrip() { OfferMessage offerMessage = new OfferMessage(); offerMessage.AddTag(new Tag(TagType.group, "ooooby")); offerMessage.AddTag(new Tag(TagType.loc, "wellington")); offerMessage.RawText = "OFFER mulch available now in l:Cardboard box in town: for #free http://bit.ly/message0Info #mulch #ooooby"; offerMessage.MessageText = "mulch available now in l:Cardboard box in town: for #free"; string serialized = JSON.Serialize(offerMessage); OfferMessage deserializedOffer = JSON.Deserialize<OfferMessage>(serialized); Assert.AreEqual(offerMessage, deserializedOffer, "Expected to deserialize to the same object"); WantedMessage wantedMessage = new WantedMessage(); wantedMessage.AddTag(new Tag(TagType.group, "ooooby")); wantedMessage.AddTag(new Tag(TagType.loc, "wellington")); wantedMessage.RawText = "WANTED mulch in l:Cardboard box in town: for #free http://bit.ly/message0Info #mulch #ooooby"; wantedMessage.MessageText = "mulch in l:Cardboard box in town: for #free"; serialized = JSON.Serialize(wantedMessage); WantedMessage deserializedWanted = JSON.Deserialize<WantedMessage>(serialized); AssertMessagesIsTheSame(wantedMessage, deserializedWanted); //Assert.AreEqual(wantedMessage, deserializedWanted, "Expected to deserialize to the same object"); }
public IMessage Parse(IRawMessage rawMessage) { string sourceText = rawMessage.Text; IEnumerable<ITag> tags = ParseTags(sourceText, rawMessage); BaseMarketMessage msg; switch (GetMessageType(sourceText, tags)) { case MessageType.need: case MessageType.needed: case MessageType.want: case MessageType.wanted: msg = new WantedMessage(); break; case MessageType.offer: case MessageType.available: default: msg = new OfferMessage(); break; } msg.CreatedBy = rawMessage.CreatedBy; msg.Timestamp = rawMessage.Timestamp; msg.MessagePointer = rawMessage.Pointer; msg.RawText = rawMessage.Text; bool containsGroup = false; foreach (ITag tag in tags) { if (tag.Type == TagType.msg_type) continue; //skip tags of this Type if(tag.Type==TagType.group) containsGroup = true; msg.AddTag(tag); } if (!containsGroup) { ITag possibleGroup = CheckForAtSymbolGroup(sourceText); if(possibleGroup != null) { //remove the @chchneeds tag from the messages sourceText=sourceText.Replace("@" + possibleGroup.Text, ""); msg.AddTag(possibleGroup); } } if (msg.HasValidTags()) { // for efficiency don't even both trying to parse the google address // unless it at least has some valid tags ILocation location = ParseLocation(sourceText); if (location != null) { msg.Location = location; foreach (ITag s in location.Tags) { msg.AddTag(s); } } } msg.MessageText = sourceText; msg.MoreInfoURL = GetMoreInfoUrl(sourceText); string untilText; DateTime until; if (ParseUntil(sourceText, out untilText, out until)) { msg.SetEndBy(untilText, until); } msg.AddThumbnail(GetImageUrl(sourceText)); return msg; }