public void BaseXmlSerializer_CanSerializeToBaseClass()
        {
            var re = new ApartmentRent {
                title = "Test"
            };
            var xml      = new BaseXmlSerializer().Serialize(re, typeof(RealEstate));
            var xElement = XElement.Parse(xml);

            Assert.Equal("realEstate", xElement.Name.LocalName);
        }
        public async Task RealEstate_Create_RequestsCorrectResource()
        {
            Http.RespondWith(m =>
            {
                Assert.Equal("POST", m);
                Assert.Equal("http://rest.sandbox-immobilienscout24.de/restapi/api/offer/v1.0/user/me/realestate", Http.Url.ToString());
                return new messages { message = new[] { new Message { messageCode = MessageCode.MESSAGE_RESOURCE_CREATED, message = "RealEstate with id [4711] has been created." } } };
            });

            var re = new ApartmentRent { title = "Test" };

            await Client.RealEstates.CreateAsync(re);
        }
        public async Task RealEstate_Create_CallSucceeds_NoExceptionThrown()
        {
            Http.RespondWith(m =>
            {
                return(new messages {
                    message = new[] { new Message {
                                          messageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, message = ""
                                      } }
                });
            });

            var re = new ApartmentRent {
                id = 4711, title = "Test"
            };

            await Client.RealEstates.UpdateAsync(re);
        }
        private static void ApartmentRentChoiceAdapterPropertiesWork()
        {
            var re = new ApartmentRent();

            Assert.Null(re.Item);
            Assert.Null(re.ConstructionYear);
            re.ConstructionYear = 1900;
            Assert.Equal(1900, re.Item);
            Assert.Equal(1900, re.ConstructionYear);
            re.ConstructionYear = null;
            Assert.Null(re.ConstructionYear);
            Assert.True(re.ConstructionYearUnknown);
            re.ConstructionYearUnknown = true;
            Assert.IsType<bool>(re.Item);
            Assert.True((bool)re.Item);
            Assert.Null(re.ConstructionYear);
        }
        public async Task RealEstate_Create_CallSucceeds_NoExceptionThrown()
        {
            RestClient.RespondWith(r =>
            {
                return(new Messages {
                    Message = { new Message {
                                    MessageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, MessageProperty = ""
                                } }
                });
            });

            var re = new ApartmentRent {
                Id = 4711, Title = "Test"
            };

            await Client.RealEstates.UpdateAsync(re);
        }
        public async Task RealEstate_Create_RequestsCorrectResource()
        {
            Http.RespondWith(m =>
            {
                Assert.Equal("POST", m);
                Assert.Equal("http://rest.sandbox-immobilienscout24.de/restapi/api/offer/v1.0/user/me/realestate", Http.Url.ToString());
                return(new messages {
                    message = new[] { new Message {
                                          messageCode = MessageCode.MESSAGE_RESOURCE_CREATED, message = "RealEstate with id [4711] has been created."
                                      } }
                });
            });

            var re = new ApartmentRent {
                title = "Test"
            };

            await Client.RealEstates.CreateAsync(re);
        }
        public async Task RealEstate_Create_CallSucceeds_RealEstateObjectHasNewId()
        {
            Http.RespondWith(m =>
            {
                return(new messages {
                    message = new[] { new Message {
                                          messageCode = MessageCode.MESSAGE_RESOURCE_CREATED, message = "RealEstate with id [4711] has been created."
                                      } }
                });
            });

            var re = new ApartmentRent {
                title = "Test"
            };

            await Client.RealEstates.CreateAsync(re);

            Assert.Equal(4711, re.id);
        }
        public async Task RealEstate_Create_CallSucceeds_RealEstateObjectHasNewId()
        {
            RestClient.RespondWith(r =>
            {
                return(new Messages {
                    Message = { new Message {
                                    MessageCode = MessageCode.MESSAGE_RESOURCE_CREATED, MessageProperty = "RealEstate with id [4711] has been created.", Id = "4711"
                                } }
                });
            });

            var re = new ApartmentRent {
                Title = "Test"
            };

            await Client.RealEstates.CreateAsync(re);

            Assert.Equal(4711, re.Id);
        }
        public async Task RealEstate_Update_RequestsCorrectResource()
        {
            Http.RespondWith(m =>
            {
                Assert.Equal("PUT", m);
                Assert.Equal("http://rest.sandbox-immobilienscout24.de/restapi/api/offer/v1.0/user/me/realestate/4711", Http.Url.ToString());
                return(new messages {
                    message = new[] { new Message {
                                          messageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, message = ""
                                      } }
                });
            });

            var re = new ApartmentRent {
                id = 4711, title = "Test"
            };

            await Client.RealEstates.UpdateAsync(re);
        }
        public async Task RealEstate_Create_RequestsCorrectResource()
        {
            RestClient.RespondWith(r =>
            {
                Assert.Equal(Method.POST, r.Method);
                Assert.Equal("https://rest.sandbox-immobilienscout24.de/restapi/api/offer/v1.0/user/me/realestate", RestClient.BuildUri(r).GetLeftPart(UriPartial.Path));
                Assert.Equal("?usenewenergysourceenev2014values=true", RestClient.BuildUri(r).Query);
                return(new Messages {
                    Message = { new Message {
                                    MessageCode = MessageCode.MESSAGE_RESOURCE_CREATED, MessageProperty = "RealEstate with id [4711] has been created.", Id = "4711"
                                } }
                });
            });

            var re = new ApartmentRent {
                Title = "Test"
            };

            await Client.RealEstates.CreateAsync(re);
        }
        public async Task RealEstate_Update_PostsRealEstateObject()
        {
            RestClient.RespondWith(r =>
            {
                var re = r.Body() as RealEstate;
                Assert.IsType <ApartmentRent>(re);
                Assert.Equal(4711, re.Id);
                return(new Messages {
                    Message = { new Message {
                                    MessageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, MessageProperty = ""
                                } }
                });
            });

            var a = new ApartmentRent {
                Id = 4711, Title = "Test"
            };

            await Client.RealEstates.UpdateAsync(a);
        }
        public async Task RealEstate_Create_PostsRealEstateObject()
        {
            RestClient.RespondWith(r =>
            {
                var re = r.Parameters.Single(p => p.Type == ParameterType.RequestBody).Value as RealEstate;
                Assert.IsType <ApartmentRent>(re);
                Assert.Equal("Test", re.Title);
                return(new Messages {
                    Message = { new Message {
                                    MessageCode = MessageCode.MESSAGE_RESOURCE_CREATED, MessageProperty = "RealEstate with id [4711] has been created.", Id = "4711"
                                } }
                });
            });

            var a = new ApartmentRent {
                Title = "Test"
            };

            await Client.RealEstates.CreateAsync(a);
        }
Beispiel #13
0
        public async Task RealEstate_Update_PostsRealEstateObject()
        {
            Http.RespondWith(m =>
            {
                var re = new BaseXmlDeserializer().Deserialize <RealEstate>(new RestResponse {
                    Content = Http.RequestBody
                });
                Assert.IsType <ApartmentRent>(re);
                Assert.Equal(4711, re.id);
                return(new messages {
                    message = new[] { new Message {
                                          messageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, message = ""
                                      } }
                });
            });

            var r = new ApartmentRent {
                id = 4711, idSpecified = true, title = "Test"
            };

            await Client.RealEstates.UpdateAsync(r);
        }
Beispiel #14
0
        public async Task RealEstate_Create_PostsRealEstateObject()
        {
            Http.RespondWith(m =>
            {
                var re = new BaseXmlDeserializer().Deserialize <RealEstate>(new RestResponse {
                    Content = Http.RequestBody
                });
                Assert.IsType <ApartmentRent>(re);
                Assert.Equal("Test", re.title);
                return(new messages {
                    message = new[] { new Message {
                                          messageCode = MessageCode.MESSAGE_RESOURCE_CREATED, message = "RealEstate with id [4711] has been created."
                                      } }
                });
            });

            var r = new ApartmentRent {
                title = "Test"
            };

            await Client.RealEstates.CreateAsync(r);
        }
        private static void ApartmentRentChoiceAdapterPropertiesWork()
        {
            var re = new ApartmentRent();

            Assert.Null(re.Item);
            Assert.Null(re.ConstructionYear);
            re.ConstructionYear = 1900;
            Assert.Equal(1900, re.Item);
            Assert.Equal(1900, re.ConstructionYear);
            re.ConstructionYear = null;
            Assert.Null(re.ConstructionYear);
            Assert.True(re.ConstructionYearUnknown);
            re.ConstructionYearUnknown = true;
            Assert.IsType<bool>(re.Item);
            Assert.True((bool)re.Item);
            Assert.Null(re.ConstructionYear);

            Assert.Null(re.Item1);
            Assert.Null(re.HeatingType);
            Assert.Null(re.HeatingTypeEnev2014);
            re.HeatingType = HeatingType.STOVE_HEATING;
            Assert.IsType<HeatingType>(re.Item1);
            Assert.Equal(HeatingType.STOVE_HEATING, re.Item1);
            re.HeatingTypeEnev2014 = HeatingTypeEnev2014.FLOOR_HEATING;
            Assert.IsType<HeatingTypeEnev2014>(re.Item1);
            Assert.Equal(HeatingTypeEnev2014.FLOOR_HEATING, re.Item1);
            Assert.Null(re.HeatingType);

            Assert.Null(re.Item2);
            Assert.Null(re.FiringTypes);
            Assert.Null(re.EnergySourcesEnev2014);
            re.FiringTypes = new FiringTypes();
            Assert.IsType<FiringTypes>(re.Item2);
            Assert.Null(re.EnergySourcesEnev2014);
            re.EnergySourcesEnev2014 = new EnergySourcesEnev2014();
            Assert.IsType<EnergySourcesEnev2014>(re.Item2);
            Assert.Null(re.FiringTypes);
        }
        private static void ApartmentRentChoiceAdapterPropertiesWork()
        {
            var re = new ApartmentRent();

            Assert.Null(re.Item);
            Assert.Null(re.ConstructionYear);
            re.ConstructionYear = 1900;
            Assert.Equal(1900, re.Item);
            Assert.Equal(1900, re.ConstructionYear);
            re.ConstructionYear = null;
            Assert.Null(re.ConstructionYear);
            Assert.True(re.ConstructionYearUnknown);
            re.ConstructionYearUnknown = true;
            Assert.IsType <bool>(re.Item);
            Assert.True((bool)re.Item);
            Assert.Null(re.ConstructionYear);

            Assert.Null(re.Item1);
            Assert.Null(re.HeatingType);
            Assert.Null(re.HeatingTypeEnev2014);
            re.HeatingType = HeatingType.STOVE_HEATING;
            Assert.IsType <HeatingType>(re.Item1);
            Assert.Equal(HeatingType.STOVE_HEATING, re.Item1);
            re.HeatingTypeEnev2014 = HeatingTypeEnev2014.FLOOR_HEATING;
            Assert.IsType <HeatingTypeEnev2014>(re.Item1);
            Assert.Equal(HeatingTypeEnev2014.FLOOR_HEATING, re.Item1);
            Assert.Null(re.HeatingType);

            Assert.Null(re.Item2);
            Assert.Null(re.FiringTypes);
            Assert.Null(re.EnergySourcesEnev2014);
            re.FiringTypes = new FiringTypes();
            Assert.IsType <FiringTypes>(re.Item2);
            Assert.Null(re.EnergySourcesEnev2014);
            re.EnergySourcesEnev2014 = new EnergySourcesEnev2014();
            Assert.IsType <EnergySourcesEnev2014>(re.Item2);
            Assert.Null(re.FiringTypes);
        }
Beispiel #17
0
        public async Task RealEstate_Create_PostsRealEstateObject()
        {
            Http.RespondWith(m =>
            {
                var re = new BaseXmlDeserializer().Deserialize<RealEstate>(new RestResponse { Content = Http.RequestBody });
                Assert.IsType<ApartmentRent>(re);
                Assert.Equal("Test", re.title);
                return new messages { message = new[] { new Message { messageCode = MessageCode.MESSAGE_RESOURCE_CREATED, message = "RealEstate with id [4711] has been created." } } };
            });

            var r = new ApartmentRent { title = "Test" };

            await Client.RealEstates.CreateAsync(r);
        }
Beispiel #18
0
        private static async Task TestAsync(Config config)
        {
            var connection = new IS24Connection
            {
                ConsumerKey       = config.ConsumerKey,
                ConsumerSecret    = config.ConsumerSecret,
                AccessToken       = config.AccessToken,
                AccessTokenSecret = config.AccessSecret,
                BaseUrlPrefix     = @"https://rest.sandbox-immobilienscout24.de/restapi/api"
            };

            var searchResource = new SearchResource(connection);
            var query          = new RadiusQuery
            {
                Latitude       = 52.49023,
                Longitude      = 13.35939,
                Radius         = 1,
                RealEstateType = RealEstateType.APARTMENT_RENT,
                Parameters     = new
                {
                    Price = new DecimalRange {
                        Max = 1000
                    },
                    LivingSpace = new DecimalRange {
                        Min = 100
                    },
                    NumberOfRooms = new DecimalRange {
                        Min = 4
                    },
                    Equipment = "balcony"
                },
                Channel = new HomepageChannel("me")
            };
            var results = await searchResource.Search(query);

            var api = new ImportExportClient(connection);
            RealtorContactDetails contact = null;

            try
            {
                contact = await api.Contacts.GetAsync("Hans Meiser", isExternal : true);
            }
            catch (IS24Exception ex)
            {
                if (ex.Messages.Message.First().MessageCode != MessageCode.ERROR_RESOURCE_NOT_FOUND)
                {
                    throw;
                }
            }

            if (contact == null)
            {
                contact = new RealtorContactDetails
                {
                    Lastname  = "Meiser",
                    Firstname = "Hans",
                    Address   = new Address
                    {
                        Street      = "Hauptstraße",
                        HouseNumber = "1",
                        Postcode    = "10827",
                        City        = "Berlin",
                        InternationalCountryRegion = new CountryRegion {
                            Country = CountryCode.DEU, Region = "Berlin"
                        }
                    },
                    Email      = "*****@*****.**",
                    ExternalId = "Hans Meiser"
                };

                await api.Contacts.CreateAsync(contact);

                contact.Address.HouseNumber = "1a";
                await api.Contacts.UpdateAsync(contact);
            }

            IRealEstate realEstate = null;

            try
            {
                realEstate = await api.RealEstates.GetAsync("Hauptstraße 1", isExternal : true);
            }
            catch (IS24Exception ex)
            {
                if (ex.Messages.Message.First().MessageCode != MessageCode.ERROR_RESOURCE_NOT_FOUND)
                {
                    throw;
                }
            }

            if (realEstate == null)
            {
                var re = new ApartmentRent
                {
                    Contact = new RealEstateContact {
                        Id = contact.Id
                    },
                    ExternalId = "Hauptstraße 1",
                    Title      = "IS24RestApi Test",
                    Address    = new Wgs84Address {
                        Street = "Hauptstraße", HouseNumber = "1", City = "Berlin", Postcode = "10827"
                    },
                    BaseRent      = 500.0,
                    LivingSpace   = 100.0,
                    NumberOfRooms = 4.0,
                    ShowAddress   = true,
                    Courtage      = new CourtageInfo {
                        HasCourtage = YesNoNotApplicableType.NO
                    }
                };

                await api.RealEstates.CreateAsync(re);

                re.BaseRent += 100.0;
                await api.RealEstates.UpdateAsync(re);

                realEstate = new RealEstateItem(re, connection);
            }
            else
            {
                var re = (ApartmentRent)realEstate.RealEstate;
                re.BaseRent += 100.0;
                await api.RealEstates.UpdateAsync(re);

                re.BaseRent -= 100.0;
                await api.RealEstates.UpdateAsync(re);
            }

            var projects = await api.RealEstateProjects.GetAllAsync();

            if (projects.RealEstateProject.Any())
            {
                var project = projects.RealEstateProject.First();
                var entries = await api.RealEstateProjects.GetAllAsync(project.Id.Value);

                if (!entries.RealEstateProjectEntry.Any(e => e.RealEstateId.Value == realEstate.RealEstate.Id.Value))
                {
                    await api.RealEstateProjects.AddAsync(project.Id.Value, realEstate.RealEstate);
                }
            }

            var placement = await realEstate.PremiumPlacements.GetAsync();

            var a1 = new KeyValuePair <Attachment, string>(new Picture {
                Title = "Zimmer 1", Floorplan = false, TitlePicture = true
            }, @"..\..\..\test.jpg");
            var a2 = new KeyValuePair <Attachment, string>(new Picture {
                Title = "Zimmer 2"
            }, @"..\..\..\test.jpg");
            var a3 = new KeyValuePair <Attachment, string>(new Picture {
                Title = "Zimmer 3"
            }, @"..\..\..\test.jpg");
            var pdf = new KeyValuePair <Attachment, string>(new PDFDocument {
                Title = "Test"
            }, @"..\..\..\test.pdf");
            var video = new KeyValuePair <Attachment, string>(new StreamingVideo {
                Title = "Video"
            }, @"..\..\..\test.avi");
            var link = new KeyValuePair <Attachment, string>(new Link {
                Title = "Test", Url = "http://www.example.com/"
            }, null);

            var atts = new[] { video, a1, pdf, a2, link, a3 };

            await realEstate.Attachments.UpdateAsync(atts);

            var res = new List <RealEstate>();
            await api.RealEstates.GetAsync().ForEachAsync(x => res.Add(x.RealEstate));
        }
Beispiel #19
0
        public async Task RealEstate_Create_CallSucceeds_RealEstateObjectHasNewId()
        {
            Http.RespondWith(m =>
            {
                return new messages { message = new[] { new Message { messageCode = MessageCode.MESSAGE_RESOURCE_CREATED, message = "RealEstate with id [4711] has been created." } } };
            });

            var re = new ApartmentRent { title = "Test" };

            await Client.RealEstates.CreateAsync(re);

            Assert.Equal(4711, re.id);
        }
Beispiel #20
0
        public async Task RealEstate_Update_PostsRealEstateObject()
        {
            Http.RespondWith(m =>
            {
                var re = new BaseXmlDeserializer().Deserialize<RealEstate>(new RestResponse { Content = Http.RequestBody });
                Assert.IsType<ApartmentRent>(re);
                Assert.Equal(4711, re.id);
                return new messages { message = new[] { new Message { messageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, message = "" } } };
            });

            var r = new ApartmentRent { id = 4711, idSpecified = true, title = "Test" };

            await Client.RealEstates.UpdateAsync(r);
        }
Beispiel #21
0
        public async Task RealEstate_Update_RequestsCorrectResource()
        {
            Http.RespondWith(m =>
            {
                Assert.Equal("PUT", m);
                Assert.Equal("http://rest.sandbox-immobilienscout24.de/restapi/api/offer/v1.0/user/me/realestate/4711", Http.Url.ToString());
                return new messages { message = new[] { new Message { messageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, message = "" } } };
            });

            var re = new ApartmentRent { id = 4711, title = "Test" };

            await Client.RealEstates.UpdateAsync(re);
        }
Beispiel #22
0
        public async Task RealEstate_Create_CallSucceeds_NoExceptionThrown()
        {
            Http.RespondWith(m =>
            {
                return new messages { message = new[] { new Message { messageCode = MessageCode.MESSAGE_RESOURCE_UPDATED, message = "" } } };
            });

            var re = new ApartmentRent { id = 4711, title = "Test" };

            await Client.RealEstates.UpdateAsync(re);
        }
Beispiel #23
0
        private static async Task TestAsync(Config config)
        {
            var connection = new IS24Connection
            {
                ConsumerKey = config.ConsumerKey,
                ConsumerSecret = config.ConsumerSecret,
                AccessToken = config.AccessToken,
                AccessTokenSecret = config.AccessSecret,
                BaseUrlPrefix = @"https://rest.sandbox-immobilienscout24.de/restapi/api"
            };

            var searchResource = new SearchResource(connection);
            var query = new RadiusQuery
            {
                Latitude = 52.49023,
                Longitude =  13.35939,
                Radius = 1,
                RealEstateType = RealEstateType.APARTMENT_RENT,
                Parameters = new
                {
                    Price = new DecimalRange { Max = 1000 },
                    LivingSpace = new DecimalRange { Min = 100 },
                    NumberOfRooms = new DecimalRange { Min = 4 },
                    Equipment = "balcony"
                },
                Channel = new HomepageChannel("me")
            };
            var results = await searchResource.Search(query);

            var api = new ImportExportClient(connection);
            RealtorContactDetails contact = null;

            try
            {
                contact = await api.Contacts.GetAsync("Hans Meiser", isExternal: true);
            }
            catch (IS24Exception ex)
            {
                if (ex.Messages.Message.First().MessageCode != MessageCode.ERROR_RESOURCE_NOT_FOUND) throw;
            }

            if (contact == null)
            {
                contact = new RealtorContactDetails
                {
                    Lastname = "Meiser",
                    Firstname = "Hans",
                    Address = new Address
                    {
                        Street = "Hauptstraße",
                        HouseNumber = "1",
                        Postcode = "10827",
                        City = "Berlin",
                        InternationalCountryRegion = new CountryRegion { Country = CountryCode.DEU, Region = "Berlin" }
                    },
                    Email = "*****@*****.**",
                    ExternalId = "Hans Meiser"
                };

                await api.Contacts.CreateAsync(contact);

                contact.Address.HouseNumber = "1a";
                await api.Contacts.UpdateAsync(contact);
            }

            IRealEstate realEstate = null;

            try
            {
                realEstate = await api.RealEstates.GetAsync("Hauptstraße 1", isExternal: true);
            }
            catch (IS24Exception ex)
            {
                if (ex.Messages.Message.First().MessageCode != MessageCode.ERROR_RESOURCE_NOT_FOUND) throw;
            }

            if (realEstate == null)
            {
                var re = new ApartmentRent
                {
                    Contact = new RealEstateContact { Id = contact.Id },
                    ExternalId = "Hauptstraße 1",
                    Title = "IS24RestApi Test",
                    Address = new Wgs84Address { Street = "Hauptstraße", HouseNumber = "1", City = "Berlin", Postcode = "10827" },
                    BaseRent = 500.0,
                    LivingSpace = 100.0,
                    NumberOfRooms = 4.0,
                    ShowAddress = true,
                    Courtage = new CourtageInfo { HasCourtage = YesNoNotApplicableType.NO }
                };

                await api.RealEstates.CreateAsync(re);

                re.BaseRent += 100.0;
                await api.RealEstates.UpdateAsync(re);

                realEstate = new RealEstateItem(re, connection);
            }
            else
            {
                var re = (ApartmentRent)realEstate.RealEstate;
                re.BaseRent += 100.0;
                await api.RealEstates.UpdateAsync(re);
                re.BaseRent -= 100.0;
                await api.RealEstates.UpdateAsync(re);
            }

            var projects = await api.RealEstateProjects.GetAllAsync();
            if (projects.RealEstateProject.Any())
            {
                var project = projects.RealEstateProject.First();
                var entries = await api.RealEstateProjects.GetAllAsync(project.Id.Value);
                if (!entries.RealEstateProjectEntry.Any(e => e.RealEstateId.Value == realEstate.RealEstate.Id.Value))
                    await api.RealEstateProjects.AddAsync(project.Id.Value, realEstate.RealEstate);
            }

            var placement = await realEstate.PremiumPlacements.GetAsync();

            var atts = await realEstate.Attachments.GetAsync();
            if (atts == null || !atts.Any())
            {
                var att = new Picture
                {
                    Floorplan = false,
                    TitlePicture = true,
                    Title = "Zimmer",
                };

                await realEstate.Attachments.CreateAsync(att, @"..\..\test.jpg");

                att.Title = "Zimmer 1";
                await realEstate.Attachments.UpdateAsync(att);

                var link = new Link { Title = "Test", Url = "http://www.example.com/" };

                await realEstate.Attachments.CreateAsync(link);

                var video = new StreamingVideo { Title = "Video" };
                await realEstate.Attachments.CreateStreamingVideoAsync(video, @"..\..\test.avi");
            }

            var res = new List<RealEstate>();
            await api.RealEstates.GetAsync().ForEachAsync(x => res.Add(x.RealEstate));
        }
Beispiel #24
0
        private static async Task TestAsync()
        {
            var config     = RestSharp.SimpleJson.DeserializeObject <Config>(File.ReadAllText("config.json"));
            var connection = new IS24Connection
            {
                ConsumerKey       = config.ConsumerKey,
                ConsumerSecret    = config.ConsumerSecret,
                AccessToken       = config.AccessToken,
                AccessTokenSecret = config.AccessSecret,
                BaseUrlPrefix     = @"http://rest.sandbox-immobilienscout24.de/restapi/api/offer/v1.0"
            };

            var api = new ImportExportClient(connection);
            RealtorContactDetails contact = null;

            try
            {
                contact = await api.Contacts.GetAsync("Hans Meiser", isExternal : true);
            }
            catch (IS24Exception ex)
            {
                if (ex.Messages.message.First().messageCode != MessageCode.ERROR_RESOURCE_NOT_FOUND)
                {
                    throw;
                }
            }

            if (contact == null)
            {
                contact = new RealtorContactDetails
                {
                    lastname  = "Meiser",
                    firstname = "Hans",
                    email     = "*****@*****.**",
                    address   = new Address
                    {
                        street      = "Hauptstraße",
                        houseNumber = "1",
                        postcode    = "10827",
                        city        = "Berlin",
                        internationalCountryRegion = new CountryRegion {
                            country = CountryCode.DEU, region = "Berlin"
                        }
                    },
                    externalId = "Hans Meiser"
                };

                await api.Contacts.CreateAsync(contact);

                contact.address.houseNumber = "1a";
                await api.Contacts.UpdateAsync(contact);
            }

            IRealEstate realEstate = null;

            try
            {
                realEstate = await api.RealEstates.GetAsync("Hauptstraße 1", isExternal : true);
            }
            catch (IS24Exception ex)
            {
                if (ex.Messages.message.First().messageCode != MessageCode.ERROR_RESOURCE_NOT_FOUND)
                {
                    throw;
                }
            }

            if (realEstate == null)
            {
                var re = new ApartmentRent
                {
                    contact = new RealEstateContact {
                        id = contact.id, idSpecified = true
                    },
                    externalId = "Hauptstraße 1",
                    title      = "IS24RestApi Test",
                    address    = new Wgs84Address {
                        street = "Hauptstraße", houseNumber = "1", city = "Berlin", postcode = "10827"
                    },
                    baseRent      = 500.0,
                    livingSpace   = 100.0,
                    numberOfRooms = 4.0,
                    showAddress   = true,
                    courtage      = new CourtageInfo {
                        hasCourtage = YesNoNotApplicableType.NO
                    }
                };

                await api.RealEstates.CreateAsync(re);

                re.baseRent += 100.0;
                await api.RealEstates.UpdateAsync(re);

                realEstate = new RealEstateItem(re, connection);
            }

            var atts = await realEstate.Attachments.GetAsync();

            if (atts == null || !atts.Any())
            {
                var att = new Picture
                {
                    floorplan    = false,
                    titlePicture = true,
                    title        = "Zimmer",
                };

                await realEstate.Attachments.CreateAsync(att, @"..\..\test.jpg");

                att.title = "Zimmer 1";
                await realEstate.Attachments.UpdateAsync(att);
            }

            await api.Publish.PublishAsync(realEstate.RealEstate);

            await api.Publish.UnpublishAsync(realEstate.RealEstate);

            var res = new List <RealEstate>();
            await api.RealEstates.GetAsync().ForEachAsync(x => res.Add(x.RealEstate));
        }